不枉初心,砥砺前行

皮皮祥的博客

欢迎留言,评论

导航

unsigned和signed的转换

一直以来,关于在overflow和underflow这方面,自己都没有怎么去关注。最近看了CSAPP,然后又在这方面吃了几次亏,比如使用C++中的vectorvector.size() 返回的就是unsigned。所以,在使用这方面时,要比较注意。
总结如下:
对于unsigned和signed进行比较时,编译器会把signed转换为unsigned。转换规则非常简单:编译器不会真的去把一个数的bit进行改变,而是使用不同的规则去解读这个数。这个因为如此,如对于-1这个数,在没有转换为unsigned之前,它在计算机中存储如下:
`1111 1111 1111 1111 1111 1111 1111 1111

我们知道,这样就是补码的表示。但如果将其转换成unsigned,那么其对应的bit仍如上,但是这时,计算机就是使用原码的规则去解读上面的bit串。所以解读出来就是

2^32-1
同样的,对于unsigned转换成signed也是运用这个规则。
//TODO 补上CSAPP的图

posted on 2022-10-06 13:13  皮皮祥  阅读(320)  评论(0编辑  收藏  举报