为什么int的范围是-1?

我读到int的范围取决于一个字节。

因此将int设为4个字节长,即4 * 8位= 32位。

所以范围应该是:2 ^(32-1)= 2 ^(31)

为什么有些人说它的^ ^ 31 – 1虽然?

谢谢!

因为计数从0开始

int的范围是2,147,483,6472 ^ 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’补码。

你的意思是2 32 -1,而不是2 32-1

但你的问题是为什么人们使用2 31 。 如果int是签名的那么丢失整整一位。 您丢失了第一位以指示该数字是正数还是负数。

带符号的int(32位)范围从-2,147,483,648到+2,147,483,647。 无符号整数(32位)的范围为0到4,294,967,295(即2 32 -1)。

int是签名数据类型。 第一位表示符号,后跟值的位。 如果符号位为0,则该值只是设置为1的所有位的总和(为2的幂)。

例如0 … 00101是2 0 + 2 2 = 5

如果第一位为1,则值为-2 32 +所有位的总和设置为1(2的幂)。

例如1 … 111100是-2 32 + 2 31 + 2 30 + … + 2 2 = -4

全0将导致零。

当您计算之后,您将看到可以使用这些32位创建范围之间(和包括) – 2 31和2 0 + … + 2 31 = 2 32 – 1之间的任何数字。

2 32-1与2 32 – 1不同(因为0包含在范围内,我们减去1)

为了您的理解,让我们用小数字4而不是32代替

2 4-1 = 8而2 4 -1 = 16-1 = 15。

希望这可以帮助!

因为整数是32位。 它可以存储总共2 ^ 32个值。 所以一个整数范围从-2 ^ 31到2 ^ 31-1,总共有2 ^ 32个值(负范围为2 ^ 31个值,正范围为2 ^ 31个值,包括0)。但是,第一个位(最重要的位是为整数的符号保留的。 再次,您需要了解负整数是如何存储的。它们以2的补码forms存储,因此-9将存储为9的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。