无符号数和有符号数中一些问题

在“有符号数”和“无符号数”做运算时,返回的结果默认为“有符号数”,且返回结果的位数会比之前多一倍。比如Uint32和int做运算,返回的数据的类型是long:有符号的64位整数。

两个Uint32在进行运算时,返回的数值可用Uint32或long来接收不过最好用long,请看下面例子:


无符号数和有符号数中一些问题

输出d2大家认为会返回什么?返回的是:4294967295。

为什么会这样呢?不是应该返回-1吗。

解释:

首先正确的值是-1,-1是一个有符号数,所以计算机会算出它的补码,也就是(这里我用4位数来表示):1111。然而我们接受的类型确实Uint32,是一个无符号数,他就会认为-1的补码就是源码,不会转换,然后最后32个1的转换成十进制,那不就是4294967295。

但是我后面测试用long来接收d2这个变量,仍然是一样的结果,所以跟我们接受类型无关,是根据两个进行运算的类型来确定的。


分享到:


相關文章: