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

int a=-1;
为什么十进制输出是-1;八进制输出为177777;十六进制为ffff??
为什么八进制和十六进制不输出负数?那个进制转换我明白~

-1的补码表示是1111111111111111,按十进制输入出是-1,按八进制输出是把这个数从尾向头三位一组三位一组输出。也就是1,111,111,111,111,111。你算一下当然是177777了。按十六进制输出是4位一组来输出。1111,1111,1111,1111把每个4位算出来就是ffff。
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-12-07
八进制,十六进制输出与编译器有关.
负数用补码表示.
补码等于反码加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
[原理相同,字长比你的编译器长]
第2个回答  2008-12-06
因为你的编译器是16位的,所以……
如果是32位的,如VC 2008就不是这样的结果了。本回答被提问者采纳
第3个回答  2008-12-06
输出的是补码吧

C语言中-1的输出问题?
a. %d 为有符号数输出,(1111 1111 1111 1111 1111 1111 1111 1111)当做有符号数,表示(-1)的补码,结果输出-1。b. %u 为无符号数输出,(1111 1111 1111 1111 1111 1111 1111 1111)当做无符号数,输出4294967295,即(2^32-1)c. %0 为8进制输出,十进制数4294967295 转化为8进制数就...

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

c语言-1输出的%u,为什么是4294967295?
在C语言中,-1输出的%u是4294967295,这是因为%u是用于输出无符号整数的格式说明符。在大多数系统上,一个无符号整数的位数是32位,其最大值是2^32-1,即4294967295。当输出-1时,-1在计算机内部通常会被当作无符号整数来处理,所以会以这种方式显示出来。这种现象的本质涉及到二进制数的表示方式和整...

c语言的-1输出的%u为什么是4294967295
答案:在C语言中,-1输出的%u是因为unsigned int类型能够表示的最大值是4294967295。详细解释:1. 了解unsigned int类型:在C语言中,`unsigned int`是一种整数类型,只能表示非负整数。它的大小取决于编译器和操作系统,一般为32位或64位。对于常见的32位系统,其能表示的最大值就是`4294967295`。2....

c语言-1输出的%u,为什么是4294967295?
C语言中printf("%u")表示按无符号数形式输出一个整数。现在的机器一般为32位或64位机,整数存储占4个字节,一个字节8位,共计32位。整数在计算机中以补码形式存储,-1的补码为32个1组成的二进制数,按无符号数输出这个二进制数,就是2^32-1=4294967295。由于采用补码表示整数,计算机本身不关心整数...

C语言问题:为什么输出 -1?
首先,输出的结果是正确的。分析:第一次循环:初值x=2,由于是x--是后置运算符,所以先用2判断,成立,再减一,x=1,输出1;第二次循环:初值x=1,先用1判断,成立,再减一,x=0,输出0;第三次判断:初值x=0,先用0判断,不成立,循环结束,程序结束。

C语言如何输出-1
你这问题太片面了 输出-1有很多方法 直接输出 printf("-1");c存进变量输出 int i=-1;printf("%d",i);如果函数的返回值为-1,那也行 int sy(){ return -1;} void main(){ printf("%d",sy());}

c语言的-1输出的%u为什么是4294967295
C语言中的%u格式说明符用于无符号整数输出,但当遇到负数时,它会呈现出特殊的值。在32位或64位机器中,整数通常以4字节(32位)的补码形式存储,-1的补码表示为全1的二进制数,即2^32 - 1,转换为无符号数输出的结果是4294967295。这个现象源于计算机不区分整数的正负,而将其视为无符号数来处理...

大一,c语言中输入-1,输出无符号整型时输出为什么
-1在内存中的补码为全1,将这个值解释为无符号整型,则为无符号整型所能表示的最大值,32位下为4294967295。

c语言为什么-1用%u输出是65535?
-1为有符号的整型,以1111111111111111(16个1)的二进制数存储。(-1二进制表示为10000000000000001,负数在计算机中用反码表示,即1111111111111111)。如果用%d输出-1正常,但是转换成无符号整数%u输出,1111111111111111(原来的有符号整数-1)被解释成1111111111111111(无符号整数65535),输出结果为65535 ...

相似回答
大家正在搜