我读到int的范围取决于一个字节。
因此将int设为4个字节长,即4 * 8位= 32位。
所以范围应该是:2 ^(32-1)= 2 ^(31)
为什么有些人说它的^ ^ 31 - 1虽然?
谢谢!
答案 0 :(得分:5)
因为计数从0开始
int的范围是 2,147,483,647 和 2 ^ 32 ,这是 2,147,483,648 。因此我们减去 1
1位的丢失也是正负号
检查此兴趣wiki关于整数的文章: -
正整数的最常见表示是字符串 比特,使用二进制数字系统。内存字节的顺序 存储比特各不相同;看到字节序。宽度或精度 整数类型是其表示中的位数。一个完整的 n位的类型可以编码2n个数字;例如,无符号类型 通常表示非负值0到2n-1。其他 有时使用整数值到位模式的编码 示例二进制编码的十进制或格雷码,或打印字符 代码如ASCII。
有四种众所周知的方式来表示二进制中的带符号数字 计算系统。最常见的是两个补码,它允许一个 带有n位的有符号整数类型表示-2(n-1)中的数字 通过2(n-1)-1。二进制补码算法很方便,因为 表示之间存在完美的一对一对应关系 和值(特别是没有单独的+0和-0),因为 加法,减法和乘法不需要区分 有符号和无符号类型之间。其他可能性包括偏移 二元,符号幅度和补码。
答案 1 :(得分:1)
你的意思是2 32 -1,而不是2 32-1 。
但你的问题是为什么人们使用2 31 。如果int是签名的那么丢失一点。你丢失了第一位,表明这个数字是正数还是负数。
signed int(32位)的范围是-2,147,483,648到+2,147,483,647。 无符号整数(32位)的范围为0到4,294,967,295(即2 32 -1)。
答案 2 :(得分:0)
2 32-1 与2 32 - 1不同(因为0包含在范围内,我们减去1)
为了您的理解,让我们替换为小数字4而不是32
2 4-1 = 8 而2 4 -1 = 16-1 = 15。
希望这有帮助!
答案 3 :(得分:0)
int是签名数据类型。 第一位表示符号,后跟值的位。 如果符号位为0,则该值只是设置为1的所有位的总和(为2的幂)。
e.g。 0 ... 00101是2 0 + 2 2 = 5
如果第一位为1,则值为-2 32 +所有位的总和设置为1(2的幂)。
e.g。 1 ... 111100是-2 32 + 2 31 + 2 30 + ... + 2 2 = -4
全0将导致零。
当你计算之后,你会看到范围之间(包括)2 31 和2 0 + ... + 2 之间的任何数字31 = 2 32 - 1可以用这32位创建。
答案 4 :(得分:0)
因为整数是32位。它可以存储总共2 ^ 32个值。因此整数范围从-2 ^ 31到2 ^ 31-1,总共有2 ^ 32个值(负范围内的2 ^ 31个值,正范围内包含0的2 ^ 31个值)。但是,第一个位(最重要的位是为整数的符号保留的。你需要了解负整数是如何存储的。它们以2的补码形式存储,因此-9将被存储为2的2的补码。 所以9存储在32位系统中 0000 0000 0000 0000 0000 0000 0000 1001 和-9将存储为 1111 1111 1111 1111 1111 1111 1111 0111(2的补码9)。
同样由于对整数进行一些算术运算,如果它恰好超过最大值(2 ^ 31-1),那么它将循环到负值。因此,如果您添加1到2 ^ 31-1,它将为您提供-2 ^ 31。