为什么任何数据类型的负值范围都比正值值大?
例如,如果是整数:
在 Turbo C 中它的范围是 -32768
到 32767
而对于 Visual Studio 它是 -2147483648
到 2147483647
。
其他数据类型也是如此。
最佳答案
由于数字的存储方式。有符号数使用称为“二进制补码表示法”的东西存储。
记住所有变量都有一定数量的位。如果其中最重要的一位(左边的一位)是 0,则该数字是非负数(即正数或零),其余位仅表示值。
但是,如果最左边的位是 1,则该数为负数。数字的实际值可以通过从表示的整数(作为无符号数,包括最左边的 1)中减去 2^n 来获得,其中 n 是变量的位数。
由于数字的实际值(“尾数”)只剩下 n - 1 位,因此可能的组合为 2^(n - 1)。对于正数/零数,这很简单:它们从 0 到 2^(n - 1) - 1。-1 是为了说明零本身——例如,如果你只有四种可能的组合,这些组合将代表 0、1、2 和 3(注意有四个数字):它从 0 到 4 - 1。
对于负数,请记住最左边的位是 1,因此表示的整数介于 2^(n - 1) 和 (2^n) - 1 之间(括号在这里非常重要!)。但是,正如我所说,您必须去掉 2^n 才能获得数字的实际值。 2^(n - 1) - 2^n 是 -(2^(n - 1)),而 ((2^n) - 1) - 2^n 是 -1。因此,负数的范围是-(2^(n - 1)) 到-1。
将所有这些放在一起,您得到 -2^(n - 1) 到 2^(n - 1) - 1。如您所见,上限得到 -1 而下限没有。
这就是负数比正数多一个的原因。
关于c - 为什么int的范围是-32768到32767?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18558271/