【发布时间】:2019-08-29 05:21:21
【问题描述】:
我正在学习 C 并且有一个关于 unsigned int 和signed int 值范围内的“-1”的愚蠢问题。我似乎无法在任何地方找到解释。
下面的段落解释了数据范围。但是,它没有解释“-1”。 “-1”代表/意味着什么?是 -1 是因为它跳过了 0 而 0 没有价值吗?
在 32 位整数中,无符号整数的范围为 0 到 2^32 -1 = 0 到 4,294,967,295 或大约 40 亿。签名版本从 -2^31 -1 到 2^31,即 –2,147,483,648 到 2,147,483,647 或大约 -20 亿到 +20 亿。范围是相同的,但它在数轴上移动。
【问题讨论】:
-
其实“签名版本从-2^31 -1到2^31 [...]”有错误.它必须是“签名版本从 -2^31 到 2^31 -1 [...]”,就像其他人说的那样:“即 –2,147,483,648到 2,147,483,647"。
-
@Yunnosch Non-2 的补码 32 位最小值将是
-2^31 + 1,而不是-2^31 -1。也许原来的()不见了,就像-(2^31 -1) -
它是 -1,因为 0 是 表示的,并且少了一个位模式可用于表示非零数字。
-
读起来很烦人。
-实际上是一个减号。改写range of 0 to 2^32 - 1或者更好的是range of 0 to 2³²-1。 -
它字面意思的意思是从前一个值中减去1。在表达式
2^32-1中,它的意思是“计算 2 的 32 次方,然后减去 1。”
标签: c