首页 > 其他分享 >unsigned和signed的转换

unsigned和signed的转换

时间:2022-10-06 13:24:29浏览次数:71  
标签:转换 unsigned signed 1111 编译器 bit

一直以来,关于在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的图

标签:转换,unsigned,signed,1111,编译器,bit
From: https://www.cnblogs.com/amxiang/p/16757444.html

相关文章