帮忙分析一下这个程序结果

来源:百度知道 编辑:UC知道 时间:2024/05/26 20:27:57
#include<stdio.h>
void main()
{
unsigned int a=65535;
int b=-2;
printf("a=%d,%o,%x,%u\n",a,a,a,a);
printf("b=%d,%o,%x,%u\n",b,b,b,b);
}
运行结果是:a=-1,177777,ffff,65535
b=-2,177776,fffe,65534
为什么啊?

当然了无符号整数65535用二进制表示为1111111111111111
你输出时%d表示按十进制(有符号)显示:-1的源码表示为1000000000000001,反码表示为11111111111111110,补码表示为1111111111111111,在计算机中数值是用补码表示的。所以你a的第一个值为-1。%o为按八进制输出,所以1,111,111,111,111,111表示为八进制是177777。%x为按十六进制输出,所以1111,1111,1111,1111表示为十六进制为ffff。%u为按无符号十进制输出,所以!!!

b的输出结果同理!!!

%d 以带符号的十进制形式输出整数
%o 以无符号的八进制形式输出整数
%x 以无符号的十六进制形式输出整数
%u 以无符号的十进制形式输出整数