首页 > 代码库 > unsigned/signed使用(c/c++)

unsigned/signed使用(c/c++)

unsigned/signed,同类型宽度都是一样,short占2字节共16个位,
无符号可以完全利用这16个位来表示数字,就有2^16=65536中可能,
可以表示0~65535,而有符号类型要用到最高位表示符号,
2^15 = 32768,所以能表示-32768~32767,为
了不出现两个0的情况,+0和-0,底层实现一般是用2的补码来表示负
数,一个负数的二进制表示,可以由这个负数的绝对值的二进制表现形
式取反再加1得到,

比如16位short值-1,绝对值是1,二进制表示为:
0000 0000 0000 0001
取反
1111 1111 1111 1110 + 1 =
1111 1111 1111 1111
而正好这个数也是无符号型最大值65535的表现形式,所以对于这个二
进制,是解释为65535还是-1,那就是printf里格式化的功能了。


采纳于:https://zhidao.baidu.com/question/518899275533973525.html

unsigned/signed使用(c/c++)