无符号数和有符号数在编程里的一些坑

无符号数和有符号数在编程里的一些坑

无符号数和有符号数在编程里的一些坑

无符号数和有符号数在编程里的一些坑

这些都是截取赵欢老师上课时候的ppt

第一个第三个没有解释我谈一下自己的观点好了hh

无符号数和有符号数在编程里的一些坑

第一个我们unsigned i,单纯的说,无符号数怎么样都是大于等于0的,所以说这是一个死循环。

有的同学可能会说,无符号数小的减去一个比自己大的数会怎么样呀?

其实无符号数和有符号数是一样的,都是加上减数的补码

0111减去0100(7减去4)

那么其实就是0111加上1100

等于0011(进位1丢弃)

结果等于

0011(4)这是正确的。

第二个其实sizeof返回的是unsigned的数据,而且i-delta>=0这是个表达式,里面有符号数i和无符号数delta,这时候符号数i会转换成无符号数i,那么实际上无符号数减去无符号数结果怎么样都是大于等于0的,所以说,还是一个死循环。


无符号数和有符号数在编程里的一些坑

这里是同理的哈哈,sizeof返回两个无符号数,然后for循环的判断式是一个表达式,所以说符号数i变成了无符号数,无符号数把-1(11111111 11111111 11111111 11111111 int在32位或者64位机器下是4字节)无符号解释的话就是4字节最大值了。。。。。。2147483647肯定不可能小于5/1-1=3了。。。。。。所以会直接跳出程序。