C语言无符号整型的输出

来源:互联网 发布:2016免费顶级域名注册 编辑:程序博客网 时间:2024/04/30 08:15
分析下面的程序:
int main()

unsigned int a ;

        int b=-1;
a=b;

printf(“%u”,a);

}


分析:如果此平台int是16位的,则

-1在内存中是以补码形式存储的。补码的二进制为:1111 1111 1111 1111
这个数按照无符号数输出:也就是0xffff 也就是65535.
从可视化的-1怎么转换到补码形式:因为假设你的平台是16位的
-1补码 = 2^16 - |-1| = 1 0000 0000 0000 0000 - 1 = 1111 1111 1111 1111:
注:16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。-1的十六进制表示为:0xffff 与65535的16进制表示一致。