有以下两段C语言程序代码: int fun1(unsigned short si) int fun2(unsigned short si) { { return(si*256

admin2017-11-20  27

问题 有以下两段C语言程序代码:
int fun1(unsigned short si)    int fun2(unsigned short si)
{                                       {
return(si*256);    return(((short)si*256)/256);
  }                           }
    请回答下列问题:
表中的哪些数据异常?并分析“异常”产生的原因。

选项

答案表4-6中,加粗的数据是一些异常的结果,即当si=128时,fun2返回的结果异常,当si=256时,fun1与fun2返回的结果均异常。si=128时,由于截断低16位乘积得到的第一位(符号位)为1,因此再进行算术右移时高位补了8位1,导致fun2的函数值“溢出”,出现了异常结果;当si=256时,由于256×si=65536,因此用16位无符号整数无法表示实际结果,导致funl和fun2结果都为0。

解析
转载请注明原文地址:https://kaotiyun.com/show/HNRi777K
0

最新回复(0)