- 看看第一个例子:
1.看看一个计算:
5000050000会产生一个负数hei man!为什么呢?
因为此计算机的int是32位,50000*50000超出了它的最大值
2.再看看另一个计算:
这个结果同样令人惊奇,它溢出了
- 那么,接下来继续看例子
正整数还是很符合的,但是浮点数呢?
可以猜得出来,结果并不为3.14,这就涉及到了浮点数的设计了
问题本质:计算机用有限的位组合形式表示在数域中无限扩张的数
一个数加到极限后,再加一后,会变成负数
- 接下来继续看:
运行:
可以看到,i越界时,一个似乎与a无关的值d,输出也令人诧异,原因也与数据如何在内存中布局有关:
可以看到,i为2、3、。。。时,操作的数便成了d。
C、C++不会执行边界检查,它们给与了程序员自由,因此,像肖申克的救赎一样,我们需要付出点什么;在这里,就意味着更多地细心。