数的溢出:
22>=0 ??
30003000>=0 ??
40000 40000>=0 ??
5000050000>=0 ??
假设要你判断上面式子的正误,你肯定会说这都是对的,因为从小学起老师教给我们的知识就是任何实数的平方大于等于0。
但是,假设要机器来运算上面的式子是否跟我们想的一样呢?下面是一个用C语言编写的一个计算整型数据的平方的程序:
让我们在Linux下运行该程序
①首先,我们先来计算一个小一点的数的平方,如2的平方,其结果为:
这样的结果对我们来说并不意外,因为2的平方本就等于4;
②接下来,我们运行一下第二和第三个不等式,其结果为:
显然,这两个不等式也是对的。
③还有最后的一个50000的平方,经过前面的三个不等式,我想最后一个不就是数字比前三个大了一点吗?没什么差别啊。这个肯定也是对的,那事实真是如此吗?运行一下便知真假:
诶,这结果怎么是这么个回事啊??怎么就变成了个负数了?跟预期的不是一码事啊!
【原因】
计算机中的整型数据是由32位2进制数组成的,因为它只有32位,它最大能表示的正整数为2的31次方减1,也就是2147483647,刚才的第四个不等式的正确结果为2500000000,大于其能表示的最大整数,超出其能表达的范围,造成了数的溢出。所以,对于计算机而言,并不是所有数的平方都大于等于。.