为什么C语言中的short型的-1按八进制输出为177777

short int a=-1;
printf("%o",a);
输出结果为177777

将-1赋值给一个short int类型的变量时,它会被存储为二进制形式的全1,即11111111 11111111。在八进制表示中,每3个二进制位对应一个八进制位。将全1的二进制数转换为八进制时,每3位进行分组,得到177777

因为o是八进制。0xffff你转换下就知道了。

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7494549
  • 这篇博客你也可以参考下:C语言——(输入正整数,将其逆序输出,并判断位数)输入0-32767之间的整数,判断位数,并分别输出各个位上的数值
  • 以下回答由chatgpt基于相关博客总结生成:

    这个问题涉及到C语言中的整型数据表示方式以及printf函数的格式化输出。

    在C语言中,整数的表示方式分为有符号和无符号两种。有符号整数使用补码表示,而无符号整数使用原码表示。

    对于short int类型的变量,它是有符号整数,使用补码表示。在补码表示中,-1的补码是全1的形式,即1111111111111111(假设short int类型占16位),所以将-1赋值给short int类型的变量a时,a的二进制表示为1111111111111111。

    当使用printf函数进行八进制输出时,使用了"%o"的格式化字符串。在八进制表示中,每3位二进制对应1位八进制。因此,将a按八进制输出时,会将其二进制表示从右向左每三位转换为八进制形式。

    对于short int类型的变量a,其二进制形式为1111111111111111,从右向左每三位转换为八进制形式为177。因此,输出结果为177。

    代码示例:

    #include <stdio.h>
    
    int main() {
        short int a = -1;
        printf("%o", a);
        return 0;
    }
    

    输出结果为177。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^