首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

char变量赋值给unsigned short 或 unsigned int,该如何解决

2013-02-24 
char变量赋值给unsigned short 或 unsigned intchar chunsigned short uShunsigned long uIntch 0xF0

char变量赋值给unsigned short 或 unsigned int


char ch;
unsigned short uSh;
unsigned long uInt;
ch = 0xF0;
uSh = ch;
uInt = ch;
printf("uSh = %x,uInt = %x,uSh = %d,uInt = %d\n",uSh,uInt,uSh,uInt);


上面这道题有2个疑问,忘大牛帮忙解惑一下
问题1:为什么uSh和uInt变量的高位部分全部填充了ff?而把char ch改为unsigned char ch,uSh和uInt变量高位部分则为0了。

问题2:当ch是char型时,printf的结果是sh = fff0,uInt = fffffff0,uSh = 65520,uInt = -16 
     (为什么是-16呢,而不是0xfffffff0换成十进制的值,莫非%d的格式化打印不出来?)
      当char是unsigned char时,printf的结果是sh = f0,uInt = f0,uSh = 240,uInt = 240
[解决办法]
问题1:为什么uSh和uInt变量的高位部分全部填充了ff?而把char ch改为unsigned char ch,uSh和uInt变量高位部分则为0了。
----- 当为signed char扩展时,高字节不填充1,怎么能保证其值还是 -16?
当为unsigned char扩展时,高字节不填充0,怎么能保证其值还是 240?
不这样做就不符合正常人的逻辑呀!

问题2:……
----- 格式跟实际类型不符,按标准应当是
"uSh = %hx,uInt = %lx,uSh = %hu,uInt = %lu\n"
也就是 short 要加前修饰h,long要加前修饰l;无符号类型是u, d是有符号类型

热点排行
Bad Request.