1 c#
我明确地将我的变量转换为in然后使用加号运算符但仍返回44我想知道为什么会发生这种情况我将变量显式转换为int.
byte b = 100;
b = (byte)(b +200);
Run Code Online (Sandbox Code Playgroud)
为什么用这个我的结果是255?
byte b = 100;
b = (byte)(b + 155);
Run Code Online (Sandbox Code Playgroud)
让我们分开吧:
byte b = 100;
int tmp = (int) b + (int) 200;
b = (byte) b;
Run Code Online (Sandbox Code Playgroud)
现在tmp将具有300的值......但这不能表示为byte.当你将它投射到byte(在未经检查的上下文中)时,它将最终为44.
C#5规范的相关部分,第6.2.1节:
显式数字转换可能会丢失信息或可能导致抛出异常.显式数字转换按如下方式处理:
- 对于从整数类型到另一个整数类型的转换,处理取决于发生转换的溢出检查上下文(第7.6.12节):
- 在已检查的上下文中,如果源操作数的值在目标类型的范围内,则转换成功,但如果源操作数的值超出目标类型的范围,则抛出System.OverflowException.
- 在未经检查的上下文中,转换始终成功,并按如下方式进行.
- 如果源类型大于目标类型,则通过丢弃其"额外"最高有效位来截断源值.然后将结果视为目标类型的值.
最后一颗子弹正是这里发生的事情.
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |