c语言中,-1的输出问题

来源:百度知道 编辑:UC知道 时间:2024/05/08 17:39:53
int a=-1;
为什么十进制输出是-1;八进制输出为177777;十六进制为ffff??
为什么八进制和十六进制不输出负数?那个进制转换我明白~

因为你的编译器是16位的,所以……
如果是32位的,如VC 2008就不是这样的结果了。

输出的是补码吧

-1的补码表示是1111111111111111,按十进制输入出是-1,按八进制输出是把这个数从尾向头三位一组三位一组输出。也就是1,111,111,111,111,111。你算一下当然是177777了。按十六进制输出是4位一组来输出。1111,1111,1111,1111把每个4位算出来就是ffff。

八进制,十六进制输出与编译器有关.
负数用补码表示.
补码等于反码加1

十六进制:
-1 -> 负 0001 -> 反码 fffe + 1
-> ffff

十六进制 ffff ->
2进制 1111 1111 1111 1111 ->
每3位合成一位,转 8 进制:
1 111 111 111 111 111
177777
---------------------
MS VC++ 编译器 得:
十六进制 ffffffff
8进制 37777777777
[原理相同,字长比你的编译器长]