c++ 类型转换(新手不理解)

int main()
{
int a=0x12345678;
int a1=0xffffffff;
char *b=(char *)&a;
char *b1=(char *)&a1;
printf("%08x,%08x\n",*b,*b1);

system("pause");

}
输出是 00000078 和 ffffffff
求大神解释,为什么12345678前六位没有,而后面那个又有

那是巧合,因为所有的内存地址被默认初始化为ff了
你可以把第二个改成ffeeffee看看

http://codepad.org/K7qrsrTk
你会发现输出是 ffffffee

主要看位数
int是2个字节,char是1个字节
12345678转换成位数是101111000110000101001110,取低8位就是01001110,等于78
另一个一样

估计是因为char是有符号的,因此如果char高位是1,那么就会用1填充,否则用0填充

int a=0x12345688;
输出ffffff88

是的,@caozhy说的对,po主定义a、a1时候,lets say,默认其实是 unsigned int,是无符号的;
但是定义char指针时候,默认是有符号的;

定义时候改成
unsigned char *b1=(char *)&a1;
就能输出000000ff

可以参考这个:http://blog.csdn.net/xiaoshengyige/article/details/11836699

这个问题不必纠结。因为X是为unsigned int准备的,而你的待输出参数是char类型,所以在C标准中这是一个未定义行为。

//用 unsigned char 就都一样了。
#include
#include
int main()
{
int a=0x12345678;
int a1=0xffffffff;
unsigned char *b=(unsigned char *)&a;
unsigned char *b1=(unsigned char *)&a1;
printf("%08x,%08x\n",*b,*b1);
// system("pause");
}