如果我有一个整数变量,其最大值被指定(2,147,483,647)为32位整数,如果我将它递增1,那么它将转为(-2147483648)负值
码
int i = int.MaxValue; // i = 2,147,483,647
i = i + 1;
Response.Write(i); // i = -2,147,483,648
Run Code Online (Sandbox Code Playgroud)
有人能解释一下吗?我没有找到值变化的确切原因.
这只是整数溢出,其中值有效地泄漏到符号位.sbyte例如,用它推理就更简单了.将127和-127的按位表示视为带符号的字节:
127: 01111111
-128: 10000000
Run Code Online (Sandbox Code Playgroud)
基本上,添加的执行就像具有无限范围一样,然后将结果截断为适当的位数,并根据其类型"解释"该值.
请注意,如果您在unchecked上下文中执行,则这就是全部.在checked上下文中,OverflowException将抛出一个.
从C#5规范的第7.8.4节开始:
在
checked上下文中,如果总和超出结果类型的范围,System.OverflowException则抛出a.在unchecked上下文中,不报告溢出,并且丢弃结果类型范围之外的任何重要高位.
| 归档时间: |
|
| 查看次数: |
139 次 |
| 最近记录: |