容器太小,就会溢出。
两种常用的数字,在计算机中,都用机器码代表。
其表达范围如下:
机器码,无论代表什么数字,只要运算结果超出范围,就是【溢出】。
但是,在计算机专业人的嘴里,就不一样了。
【无符号数的溢出】,不叫溢出,要叫做【进位】。
【带符号数的溢出】,才叫做【溢出】。
搞计算机的这些人,基本概念不清,却自命不凡!
冒充脑回路清奇。。。正常人对此,就只能无语了。
---------------------------
按照计算机专业的说法:
溢出,是指“补码运算结果超出范围”。
溢出的特征,是“符号错误”。
知道了这些,判断是否溢出,就很容易了。
一、无符号数的运算,肯定不会溢出。只有进位。
二、只有:正+正、负+负,才可能溢出。不是这些,就绝不会溢出。
三、人工用数值计算。和,如果不超出范围,就不会溢出。
四、人工用补码计算。和的符号,如果正确,就没有溢出。
五、编个程序,让计算机计算。然后观察溢出标志位,为零,就没有溢出。
六、人工用补码计算,如“最高位的进位”和“次高位的进位”相同,就没有溢出。
第六种,本是 CPU 的硬件所用的方法。
关于硬件,其理论基础,是很晦涩难懂的。
异或运算,一般也不需要初学者掌握。
但是,一些爱得瑟的老师,偏爱介绍这种方法。
其实,这是很无聊的表现,总想难为难为学生。
1.符号位判定,两个相同符号的数相加后,结果与两个加数一致
2.最高位的进位判定,两个正数相加,最高有效位有进位,符号位无进位.
两个负数相加,最高有效位无进位,而符号位有进位.
3.采用变形补码法,正数前加0负数前加1,运算后,两符号不一致,则溢出.
溢出,在用二进制进行加减计算的时候,要看“最高位的进位”就“次高位的进位”。
这两个进位,如果相同,则无溢出。
设两个8位补码表示的数b7b6b5b4b3b2b1b0和a7a6a5a4a3a2a1a0相加,
把b7
+
a7的进位称为C7,把b6
+
a6的进位称为C6,
那么,C7、C6,如果不同,就是溢出了。
楼主给出的题目如下,依据这些,是不能判断溢出的,因为其中并没有“次高位的进位”。
溢出(b7,a7为符号标记),则____
A.b7与a7的逻辑或结果一定是1
B.b7与a7的逻辑与结果一定是为0
C.b7与a7的逻辑异或结果一定为1
D.b7与a7的逻辑异或结果一定0;答案为D,你们看下,