n
- 位整数的最大值是2 n -1。为什么我们有“减1”?为什么最大只有2 n ?
答案 0 :(得分:66)
-1
是因为整数从0开始,但我们的计数从1开始。
因此,2^32-1
是32位无符号整数(32位二进制数字)的最大值。 2^32
是可能值的数量。
为了简化原因,请查看十进制。 10^2-1
是2位十进制数(99)的最大值。因为我们直观的人类计数从1开始,但整数从0开始,10^2
是值的数量(100)。
答案 1 :(得分:24)
2^32
:
1 00000000 00000000 00000000 00000000
二进制文件中的 2^32 - 1
:
11111111 11111111 11111111 11111111
如您所见,2^32
占用33
位,而2^32 - 1
是32
位整数的最大值。
这里看似“一个一个”错误的原因是最低位代表一个而不是两个。所以 第一个 位实际上是2^0
, 第二个 位是2^1
,等...
答案 2 :(得分:12)
2 32 是一个后跟32个零,总共 33 位。这不适合32位的int值。
答案 3 :(得分:8)
在大多数编程语言中,0
也是的数字。
答案 4 :(得分:5)
从0到N的数字不是N.它们是N + 1。这对大多数人来说并不明显,因此许多程序都有错误,因为如果这个原因。
答案 5 :(得分:2)
这是因为在计算中,数字从0
开始。因此,如果您有32个地址线(2 32 可寻址字节),它们将在[0, 2^32)
范围内。
答案 6 :(得分:2)
如果您刚刚开始编程,我建议您查看signed number representations
上的这篇wiki文章正如Vicente所说,减去1的原因是因为0
也是一个包含的数字。举个简单的例子,有3位,你可以表示下面的非负整数
0 : 000
1 : 001
2 : 010
3 : 011
4 : 100
5 : 101
6 : 110
7 : 111
超出此范围的任何内容都需要超过3位数。因此,您可以表示的最大数字是2 ^ 3-1 = 7。因此,您可以将此扩展到任何n
,并表示您可以在[0,2^n -1]
范围内表达整数。现在你可以阅读那篇文章并理解不同的形式,并表示负整数等。
答案 7 :(得分:2)
如果我问你最适合2位数的值是多少,你会说它是10 2 (100)或10 2 -1 (99)?显然是后者。因此,如果我问你最大的n
- 位数是多少,那么它将是10 n -1。但为什么会出现“-1”?很简单,因为我们可以将2位数字中的0表示为00(但每个人只写0)。
让我们用任意基数10
替换b
。因此,对于给定的基数b
,您可以表示的最大n
- 位数是b n -1。使用32位(n = 32
)base-2(b = 2
)数字,我们看到最大值我们可以表示2 32 -1。
另一种思考方式是使用较小的数字。假设我们有一位数。你能告诉我它能代表的最大值是2 1 还是2 1 -1?
答案 8 :(得分:1)
在大多数编程语言中, integer是有符号值(参见two's complement)。
例如,在Java和.NET中,大多数左边的字节都是为sign:
保留的0
=>正数或零数1
=>负数然后32-bit
号码的最大值受2^31
限制。添加-1
后,我们会获得2^31 - 1
。
为什么会出现-1
?
使用无符号字节(8位)查看更简单的示例:
1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1 <-- the most right bit cannot represent 2
--- --------------------
128 + 127 = 255
正如其他人指出,由于1
值,最右边的位的最大值可能为2
,而不是0/1
。
Int32.MaxValue = 2147483647 (.NET)
答案 9 :(得分:1)
因为0也表示。您可以表示的数字量确实为2 ^ n,n位,但最大数量为2 ^ n-1,因为您必须以0开始计数,即每个位设置为0。
1位:0,1 对于2位:0,1,2,3 对于3位:0,1,2,3,4,5,6,7
等等。
答案 10 :(得分:0)
在计算领域,我们从0开始计算。
答案 11 :(得分:0)
为什么我们有“减1”?
回答这个问题:什么是 1位整数的最大值?
一位整数只能存储两个(2 1 )值:0
和1
。最后一个值是1 2 = 1 10
两位整数只能存储四(2 2 )值:00
,01
,{ {1}}和10
。最后一个值是11 2 = 3 10
因此,当整数可以存储11
时,值的最后一个值将为N
,因为计数从零开始。
N-1
位整数可以存储n
2
值。最后一位是n
n 2
实施例:
一个字节可以存储-1
8 (256)值。首先是2
,最后是0
为什么最大值不是2n?
因为计数从零开始。查看任何255
位整数的第一个值
例如字节:n
如果出现以下情况,这将非常令人困惑:
00000000
表示00000001
2
表示00000000