有以下两段C语言程序代码: int funl(unsigned short si) int fun2 (unsigned short si} return . (s1*256) ; return (( (short) s1*256) /256

admin2017-04-28  10

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

选项

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

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

最新回复(0)