惊世大发现!Delphi运算会出错??? ( 积分: 20 )

  • 主题发起人 主题发起人 batconv
  • 开始时间 开始时间
B

batconv

Unregistered / Unconfirmed
GUEST, unregistred user!
今天我下载了个纯真IP包,但是里面是常规IP地址,无法直接用到我的网站,于是我只好自己按照 ip=ip1*256*256*256+ip2*256*256+ip3*256+ip4-1 的通用公式进行转换。在进行转换的时候我发现当转换到128.255.255.255时是正确的2164260862,但是转换到129.0.0.0时结果却变成2130706431,明显不对,大于128.255.255.255的地址统统不对,我检查了一下,是129*256*256*256的结果是2130706432,这么简单的运算怎么会错?是不是有其它因素,盼高手指点一二!!!
 
请将IP变量声明成
var
IP: Cardinal;
不要声明成
var
IP: Integer;
两者虽同是32位,但前者是无符号整数,后者是有符号整数。
 
呵呵,为了吸引眼球才用了这么个题目,但好像也没有多少人故意回答嘛:)
问题解决了,原因是我定义的是double型,为了取正数用了ABS函数,结果abs(129*256*256*256)=2130706432,至于为什么会是这个结果,百思不得其解,另外为何正数相乘会得负数,也是不明白,望高手指点一二。
 
>>何正数相乘会得负数
有符号整数相乘,值超过32位数,高位上有相乘的结果,低位变了,但你的程序只按照低位读取值,自然成负数了!这是基础知识。
 
受教受教,半路出家,多谢多谢!
 
接受答案了.
 
后退
顶部