抢车位中的排名bug(比較使用了无符号数)

     昨天把这个发在了qzone,想来还是怪怪的,还是转过来不吧,纯当发现了一个虫子,玩笑一下。只是csdn如今不能贴图,挺郁闷的,原文在http://user.qzone.qq.com/110907073/blog/1264524991

     首先上图,今天我心血来潮想看看我的抢车位怎么个情况,不出意外应该还是排名第一把,尽管近期意外比較多。打开一看,吓了一跳,怎么排到第三去了,不急,看看第一第二比我多多少,再看,这才真吓了一跳,竟然是负数……无语,大家细致看图片,我的现金是22309730还有98800000的汽车固定资产,而如今排名第一的妹妹,总资产负4040,这个现今-20040加上汽车的16000(16000-20040= - 4040)算出来的,先无论她的现金是怎么变成负数的,呵呵,看看程序猿是怎么犯这个错误的吧。

图片

照片名称:抢车位bug,强大的图片

 

      我開始以为是整数溢出了造成的bug,只是以下的第二名也是负数,他是负28360,假设是整数溢出的话,显示的总资产应该会不对,由于进位会被直接丢掉了,所以计算这块应该是没有问题的,出问题的应该是比較的时候,预计这哥么想不可能有负数把,就随手写下了两个无符号数的比較,如是,问题产生了,还真就出现了负数:

      32位的无符号整数最大是(0xFFFFFFFF)2的32次方减1,4294967295

      把-4040换算成计算机表示(二进制补码)为:1111 1111 1111 1111 1111 0000 0011 1000 这个数假设当成一个无符号数是4294963256,相同-28360换算出来是4294938936,哈哈,确实一个第一,一个第二啊,并且比我的总资产121109730确实大多了。

      只是那个好友列表里面的排行是正确的,呵呵,可能这两部分是两个不同的人写的。嘿嘿。

原文地址:https://www.cnblogs.com/zfyouxi/p/4295162.html