char型变量理解

char  c = 128;

printf("%d", c);

问输出是多少?

正确答案应该是-128。

 

如下几种情况:

char c=128;
printf("%u\n", c); //按%u输出,结果为 4294967168
printf("%d\n", c); //按%d输出,结果为 -128

printf("%c\n", c);//按%c输出,结果为空

 

原因:

c 是一个字符的长度,但当它被传送到printf函数的参数时,是将c按照int来扩张传给printf的。
128 即为二进制的 1000 0000,16进制的0x80, 当它扩展为 int时,由于int可能是4个字节,所以会进行符号扩展。由于 128最高为是1,为负数,扩展为int的-128为11111111 111111 111111 1000000,即0xffffff80


而0xffffff80按照有符号的int来说,就是-128。
而按照无符号的int来说,就是十进制的 4294967168。

 

 

posted on 2014-11-18 14:58  vi_cc  阅读(2571)  评论(0编辑  收藏  举报

导航