为什么任何数据类型的范围在负极性都比正极性更大?
例如,对于整数:
在Turbo C的它的范围是-32768
要32767
和Visual Studio的是-2147483648
要2147483647
。
其他数据类型也是如此...
[UPD:为Visual Studio设置适当的限制值]
由于数字的存储方式。带符号的数字使用“二进制补码表示法”进行存储。
请记住,所有变量都有一定数量的位。如果其中最重要的一个(即左侧的那个)为0,则该数字为非负数(即,正数或零),其余位仅表示该值。
但是,如果最左边的位为1,则数字为负。可以通过从表示的整数中减去2 ^ n(作为无符号数,包括最左边的1)来获得数字的实数值,其中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,下限为-1。
这就是为什么负数多于正数的原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句