64,654
社区成员
发帖
与我相关
我的任务
分享
unsigned int a = 0xfffffff7;
unsigned char i = (unsigned char)a;
char *b = (char *)&a;
//用传统的printf就输出正常
printf("%08x,%08x\n",i,*b);//输出结果:000000f7,fffffff7
unsigned int a = 0xfffffff7;
unsigned char i = (unsigned char)a;
char *b = (char *)&a;
//如下是哪里不对?
cout<<setw(8)<<hex<<i<<endl
cout<<setw(8)<<hex<<*b<<endl
# include <stdio.h>
int main()
{
unsigned int a = 0xFFFFFFF7;
unsigned char i = (unsigned char)a; // i为0xF7
char * b = (char *)&a; // 小端系统,b指向0xF7
printf("%08x,%08x\n", i, *b); // x需要int长度,这里i和*b都发生了类型提升(隐式转换)
return 0;
}
# include <iostream>
# include <iomanip>
using namespace std;
int main()
{
unsigned int a = 0xfffffff7;
unsigned char i = (unsigned char)a;
char * b = (char *)&a;
// 以上分析和上面的一样
cout << setw(8) << hex << i << endl;
cout << setw(8) << hex << *b << endl;
// cout针对操作数的类型做了各种重载,所以以上的i和*b都是按char来输出0xF7的,因为它们是char类型
return 0;
}
# include <iostream>
# include <iomanip>
using namespace std;
int main()
{
unsigned int a = 0xfffffff7;
unsigned char i = (unsigned char)a;
char * b = (char *)&a;
cout << setw(8) << hex << (unsigned int)i << endl;
cout << setw(8) << hex << (int)*b << endl;
cout << setw(8) << setfill('0') << hex << (unsigned int)i << endl;
return 0;
}
f7
fffffff7
000000f7
unsigned int a = 0xfffffff7;
unsigned char i = (unsigned char)a;
char *b = (char *)&a;
这个时候是一个char型的指针b指向a,char型的寻址是每次跳一个字节,而int型指针是跳4字节,那么这个时候*b的内容就应该是a的前一个字节,f7,为什么输出是fffffff7?
printf("%08x,%08x\n",i,*b);//输出结果:000000f7,fffffff7