Result:=(e + f);//这里为什么出错?(10分)

  • 主题发起人 yecloudy
  • 开始时间
Y

yecloudy

Unregistered / Unconfirmed
GUEST, unregistred user!
function MakeIpAdress(b1,b2,b3,b4:byte):Cardinal;<br>var<br>a,b,c,d,e,f:Cardinal ;<br>begin<br>&nbsp; a:= longint(b1) shl 24;<br>&nbsp; b:= longint(b2) shl 16;<br>&nbsp; c:= longint(b3) shl 8;<br>&nbsp; d:= longint(b4);<br>&nbsp; e:=(a + b);<br>&nbsp; f:=(c + d);<br>&nbsp; Result:=(e + f);//这里为什么出错?<br>end;
 
问问题清楚些,出什么错?
 
Cardinal 0..4294967295 unsigned 32-bit<br>Longint -2147483648..2147483647 signed 32-bit<br><br>经过上六行运算,可能数值超出Cardinal的范围,比如变成了一个负数!为什么不说说出什么错?
 
你要注意传递到函数的实参的值的范围,BYTE为8位无符号整数,我用了,没问题的,<br>但最好你把LONGINT换成CARDINAL以后再用移位运算,
 
顶部