为什么无符号数运算时结果可能会发生“溢出”?什么叫无符号数的“溢出”?
计算机的机器字长总是有限的,因而机器数的位数有限,使得可表示的数的个数有限。对于n位二进制数,只能表示2n个不同的数,当运算结果超过n位数时就可能发生溢岀。对于无符号数来说,计算机运算过程中一般保留低n位,舍弃高位。这样会产生两种 结果: ① 剩下的低n位数不能正确表示运算结果。这种情况意味着运算的结果超出了计算机能表达的范围,有效数值进到了第n+1位,我们称此时发生了“溢出”现象。例如,对于4位无符号数相加运算,当计算14+3时就发生溢出,即1110+0011 = 1 0001,结果中第一位1是数值部分,这个1丢弃后结果就不对了。 ② 剩下的低n位数能正确表达计算结果,也即高位的舍去并不影响其运算结果。例如,对于4位无符号数相减运算,当计算14-3时,用14加-3的补码来实现,即1110+1101 =1 1011,结果中第一位1不是数值部分,这个1丢弃后的结果是十进制的11,因此是正确的。 “对一个多于n位的数丢弃高位而保留低n位数”这样一种处理,实际上等价于“将这 个多于n位的数去除以2n然后丢弃商保留其余数”的操作。这种操作运算就是“模运算”。 在一个模运算系统中,运算的结果最终都是丢弃高位而保留低位。所以,只要不是“溢出”(即只要真正的值不会进到第n+1位),结果就是正确的。这是模运算系统的特点。
举一反三
- 以下说法正确的是( ) OF=l指无符号数运算结果产生溢出,CF=l指有符号数运算结果产生溢出 OF=l指有符号数运算结果产生溢出,CF=l指无符号数运算结果产生溢出 有符号数或无符号数运算结果产生溢出,CF=1 有符号数或无符号数运算结果产生溢出,OF=1
- 只有有符号数运算才可能溢出,无符号数运算是不会发生溢出的。
- 进位标志位C,与溢出标志位V的区别( )。 A: 进位标志C和溢出标志V,对无符号数和有符号数运算结果一样 B: 进位标志C是有符号数运算,溢出标志V是无符号数运算 C: 进位标志C是无符号数运算,溢出标志V是有符号数运算 D: 溢出标志V对无符号数和有符号数运算结果一样
- 无符号数的运算是否溢出看OV标志。
- 对于“溢出”和“进位”,下列描述正确的是: A: MIPS处理器只针对有符号数运算指令产生“溢出”异常 B: 有“进位”时,不一定有“溢出” C: 有“溢出”时,不一定有“进位” D: 有“进位”时,一定有“溢出” E: MIPS处理器针对有符号数和无符号数运算指令都可能产生“溢出”异常
内容
- 0
当标志位=1时,表示无符号数运算产生溢出
- 1
中国大学MOOC: 单符号位补码表示的两个同号数相加或异号数相减时,所得结果的符号位SF和进位标志CF进行()运算为1时,表示运算的结果产生溢出
- 2
当两个同符号数相加或者不同符号数相减时,运算结果可能超出有效范围导致溢出。
- 3
在无符号数的运算过程中,可以通过ov位来判断结果是否溢出。
- 4
当采用双符号位进行数据运算时,若运算结果的双符号位为01,则表明运算()。 A: 无溢出 B: 正溢出 C: 负溢出 D: 不能判别是否溢出