我读到整数的范围取决于一个字节。
因此,如果将int视为4个字节长,那么就是4 * 8位 = 32位。
因此,其范围应该是:2 ^ (32-1) = 2 ^ (31)
但是为什么有些人说它是2^31 -1?
谢谢!
我读到整数的范围取决于一个字节。
因此,如果将int视为4个字节长,那么就是4 * 8位 = 32位。
因此,其范围应该是:2 ^ (32-1) = 2 ^ (31)
但是为什么有些人说它是2^31 -1?
谢谢!
因为计数从0开始
而int的范围是2,147,483,647和2^32,即2,147,483,648。因此我们要减去1
同时,1位的损失是为了正负号
请查看这篇有趣的wiki关于整数的文章:
正整数的最常见表示形式是使用二进制数字系统的位串。存储位的内存字节的顺序有所不同;参见字节序。整数类型的宽度或精度是其表示中的位数。一个有n个位的整数类型可以编码 2^n 个数字;例如,无符号类型通常表示非负值 0 到 2^(n−1)。有时会使用其他将整数值编码为位模式的编码方式,例如二进制编码十进制或格雷码,或作为打印字符代码,例如 ASCII。232-1 不等于 232 - 1(因为范围包括0,所以要减去1)
为了方便理解,我们用小数字4代替32
24-1 = 8 而 24-1 = 16-1 = 15。
希望这能帮到你!
<sup> </sup>
if you want - Grijesh Chauhan由于整数是32位的,它可以存储总共2^32个值。因此,一个整数的范围从-2^31到2^31-1,共有2^32个值(负范围内有2^31个值+正范围内有2^31个值,包括0)。然而,第一位(最高有效位)保留给整数的符号。再次需要了解如何存储负整数。它们以2的补码形式存储,所以-9将被存储为9的2的补码。 因此,在32位系统中,9被存储为 0000 0000 0000 0000 0000 0000 0000 1001, 而-9将被存储为 1111 1111 1111 1111 1111 1111 1111 0111(9的2的补码)。
再次由于对整数进行某些算术运算时,如果超过了最大值(2^31-1),则会循环到负值。因此,如果将1加到2^31-1,则会得到-2^31。
1
,这是因为(2^1) - 1 = 2 - 1 = 1
而不是因为2^(1-1) = 2^0 = 1
。 - Grijesh Chauhan