求高人指点:C语言中char型与int型强制转换的内部过程
本人最近笔试,碰到不少C语言强制转换问题,赶脚越转越糊涂了~不多说,先看一段代码:
#include <stdio.h>
int main()
{
char a = 254;
printf("10进制形式:a=%d,254=%d\n",a,254);
printf("16进制形式:a=%x,254=%x\n",a,254);
int b = (int)a;
int c = (int)(a&0xFF);
printf("10进制形式:b=%d,c=%d\n",b,c);
printf("16进制形式:b=%x,c=%x\n",b,c);
return 0;
}
本人在VS2008(32位编译器)编译运行后结果如下:
10进制形式:a=-2,254=254
16进制形式:a=fffffffe,254=fe
10进制形式:b=-2,c=254
16进制形式:b=fffffffe,c=fe
请按任意键继续. . .
关于此题,本人有如下疑问,望高手解答一下:
(1)char型变量a,在内存中占一个字节,按照低位截断,感觉16进制形式的a应该为0xfe,为何是0xfffffffe?
(2)b的值还能勉强理解,但是c的值是怎么来的?