在“有符号数”和“无符号数”做运算时,返回的结果默认为“有符号数”,且返回结果的位数会比之前多一倍。比如Uint32和int做运算,返回的数据的类型是long:有符号的64位整数。
两个Uint32在进行运算时,返回的数值可用Uint32或long来接收不过最好用long,请看下面例子:
输出d2大家认为会返回什么?返回的是:4294967295。
为什么会这样呢?不是应该返回-1吗。
解释:
首先正确的值是-1,-1是一个有符号数,所以计算机会算出它的补码,也就是(这里我用4位数来表示):1111。然而我们接受的类型确实Uint32,是一个无符号数,他就会认为-1的补码就是源码,不会转换,然后最后32个1的转换成十进制,那不就是4294967295。
但是我后面测试用long来接收d2这个变量,仍然是一样的结果,所以跟我们接受类型无关,是根据两个进行运算的类型来确定的。