1. 问题描述
问题:以无符号八进制形式输出负数-128:
2. 解释-从结果出发
得到八进制的结果:
37777777600
八进制转换为二进制:
011 111 111 111 111 111 111 111 110 000 000
二进制以8位为一组:
11111111 11111111 11111111 10000000
这是补码形式,减1转换为反码:
11111111 11111111 11111111 01111111
反码转换为原码:
10000000 00000000 00000000 10000000
这就是-128。
3. 解释-从原因出发
char a = -128
的存储只需要一个字节:
10000000
而用%o
无符号八进制形式输出,则会将输出的变量解释为4个字节,所以-128的原码如下:
10000000 00000000 00000000 10000000
转换为反码补码如下:
反码:11111111 11111111 11111111 01111111
补码:11111111 11111111 11111111 10000000
补码转换为八进制就是:37777777600