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
时间: 2024-10-07 14:31:45