《深入理解计算机系统》 CMU15213 笔记(一)

  • 看看第一个例子:
    在这里插入图片描述
    1.看看一个计算:
    在这里插入图片描述
    5000050000会产生一个负数hei man!为什么呢?
    因为此计算机的int是32位,50000*50000超出了它的最大值

2.再看看另一个计算:
在这里插入图片描述
这个结果同样令人惊奇,它溢出了

  • 那么,接下来继续看例子
    在这里插入图片描述
    正整数还是很符合的,但是浮点数呢?
    在这里插入图片描述
    可以猜得出来,结果并不为3.14,这就涉及到了浮点数的设计了

问题本质:计算机用有限的位组合形式表示在数域中无限扩张的数

一个数加到极限后,再加一后,会变成负数

  • 接下来继续看:
    在这里插入图片描述
    运行:
    在这里插入图片描述
    可以看到,i越界时,一个似乎与a无关的值d,输出也令人诧异,原因也与数据如何在内存中布局有关:
    在这里插入图片描述
    可以看到,i为2、3、。。。时,操作的数便成了d。
    C、C++不会执行边界检查,它们给与了程序员自由,因此,像肖申克的救赎一样,我们需要付出点什么;在这里,就意味着更多地细心。

猜你喜欢

转载自blog.csdn.net/qq_41594698/article/details/89648309
今日推荐