linux下c编程unsigned int强制类型转换

#include "stdio.h"
int main(void)
{
char a=200;
printf("%u\n",(unsigned int)a);
}
输出 4294967240

转换时不是会在前面添0吗?它怎么会添1呢?
如何让它添0?

这和linux环境无关了,windows下也是这样的。
虽然8为的char可以表示256个字符,不过明显系统是用有符号数表示它的。超过127的数计算机就理解成负数了。200应该是表示为 -73

然后就是强制转换的问题了,系统先把-73按照补码的格式扩展到4个字节的int型,补码就是"111111111111111111111111101100101",后面几个01是我乱打的,懒得算了....然后用unsigned表示就是4294967240了。
至于LZ文为什么强制转化的unsigned int类型就按int类型来处理了,我只能说编译器就是这么做了,编程的时候还是得小心点。追问

我明白了。要改为unsigned char才行
thank you

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-23
你的意思是print的时候,在变量a的左边补上n位的“0”吧?
#include "stdio.h"
int main(void)
{
char a=200;
printf("%012u\n",(unsigned int)a);
}
"%012u"的012表示格式化成12位输出,不足12位的话再左边补0,补够12位。