如何取消选中int溢出工作c#

dxd*_*sdz -2 c# theory binary

我们知道int值的最大值为2 ^ 31 - 1,最小值为-2 ^ 31.如果我们将int设置为最大值:

int x = int.MaxValue;
Run Code Online (Sandbox Code Playgroud)

我们将x取出并在未选中的字段中添加一个

unchecked
{
    x++;
}
Run Code Online (Sandbox Code Playgroud)

然后我们得到x = int的最小值.我的问题是为什么会发生这种情况以及它如何在二进制方面发生.

小智 5

在C#中,内置整数由预定义长度的一系列位值表示.对于长度为32位的基本int数据类型.由于32位只能表示4,294,967,296个不同的可能值(因为它是2 ^ 32),

由于int可以包含正数和负数,因此必须以某种方式对数字的符号进行编码.这是通过第一位完成的.如果第一位为1,则该数字为负.

以下是以十六进制和十进制表示的数字行上的int值:

 Hexadecimal        Decimal
 -----------    -----------
 0x80000000     -2147483648
 0x80000001     -2147483647
 0x80000002     -2147483646
    ...              ...
 0xFFFFFFFE              -2
 0xFFFFFFFF              -1
 0x00000000               0
 0x00000001               1
 0x00000002               2
     ...             ...
 0x7FFFFFFE      2147483646
 0x7FFFFFFF      2147483647
Run Code Online (Sandbox Code Playgroud)

从该图表中可以看出,代表最小可能值的位是通过将一个加到最大可能值而忽略符号位的解释而得到的.以这种方式添加带符号的数字时,它被称为"整数溢出".是否允许整数溢出或将其视为错误,可以使用C#中的checked和unchecked语句进行配置.

这种表示称为2的补码

如果您想深入了解,可以查看此链接.