关于int32存储 (c#), 我有一个问题。
32位表示int的最大数字为2^32。
2^32 = 4294967296
, 如果你将其除以2,你就得到了int32的最大值:
4294967296 / 2 = -2147483648 to 2147483648
所以我原以为一半的位数用于负数,另一半用于正数。
但这不可能是真的,因为2^16 = 65536
。
现在我的问题:
实际上内存中是如何设置的?
我非常好奇你们的答案。
Int32.MaxValue = 2^31 - 1 = 01111111111111111111111111111111
Int32.MinValue = -2^31 = 10000000000000000000000000000000
0xFFFFFFFF
为例。在二进制中,它是:1111 1111 1111 1111 1111 1111 1111 1111
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0001
0000 0000 0000 0000 0000 0000 0001 1110
1111 1111 1111 1111 1111 1111 1110 0001
1111 1111 1111 1111 1111 1111 1110 0010
转换回十六进制,这是0xFFFFFFE2
编辑,CPU如何使用二进制补码执行减法
CPU使用负数的二进制补码进行加法来执行减法。让我们以8位数字为例。我们想从七中减去四。
7 = 00000111
4 = 00000100
00000100 -> 11111011
11111011
00000001
========
11111100
00000111 (binary representation of 7)
11111100 (binary representation after Two's complement of 4)
========
00000011 (binary representation of 3)
-(2^31)
到2^31-1
。 - devnull69