题目
下列说法正确的是( )。A. 采用双符号位补码进行加减运算可以避免溢出B. 只有定点数运算才有可能溢出,浮点数运算不会产生溢出C. 只有将两个正数相加时才有可能产生溢出D. 只有带符号数的运算才有可能产生溢出
下列说法正确的是( )。
A. 采用双符号位补码进行加减运算可以避免溢出
B. 只有定点数运算才有可能溢出,浮点数运算不会产生溢出
C. 只有将两个正数相加时才有可能产生溢出
D. 只有带符号数的运算才有可能产生溢出
题目解答
答案
D. 只有带符号数的运算才有可能产生溢出
解析
本题主要考察计算机中数据运算溢出的相关知识,需对各选项涉及的溢出概念、补码运算、定点数与浮点数溢出、带符号数与无符号数运算特点逐一分析:
选项A分析
双符号位补码(变形补码)采用两位符号位(00表示正,11表示负),运算结果的符号位组合可判断溢出:若结果为01(正溢出)或10(负溢出)则溢出,若为00或11则未溢出。双符号位补码能检测溢出,但无法“避免”溢出,运算结果仍可能溢出,仅能通过符号位判断是否发生。故A错误。
选项B分析
浮点数运算也会溢出:当浮点数的阶码超过其表示范围时,会发生“阶码溢出”(上溢:结果过大无法表示;下溢:结果过小接近零)。例如,若浮点数阶码为8位补码(范围-128~127),两个阶码为127的数相加,结果阶码为128,超出范围即溢出。故B错误。
选项C分析
溢出不仅发生在正数相加,负数相加也可能溢出:
- 正数相加:若结果超过最大正数(如8位补码中,$01111111+00000001=10000000$,符号位变负,正溢出);
- 负数相加:若结果小于最小负数(如8位补码中,$10000000+10000000=100000000$,符号位变正,负溢出)。
故C错误。
选项D分析
无符号数运算采用模运算,溢出时自动截断(如8位无符号数$255+1=0$),结果仅丢失高位,不视为“溢出错误”;只有带符号数运算中,溢出会导致符号位错误,结果完全错误(如正数变负或负数变正),因此仅带符号数运算可能产生“有害溢出”。故D正确。