作业帮 > 综合 > 作业

c++指针强制类型转换 unsigned int a = 0xFFFFFFF7; char*b = (char*)&a;

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/27 18:50:08
c++指针强制类型转换 unsigned int a = 0xFFFFFFF7; char*b = (char*)&a; printf("%08x",*b);输出的问题
unsigned int a = 0xFFFFFFF7;
char*b = (char*)&a;
printf("%08x",*b);
这段代码输出为FFFFFFF7,可以理解为*b输出了a存储区的数据,可是将char*换成unsigned char*之后,输出为000000F7,只输出了低字节,一个字节的内容,这是为什么?
问题多了去了,char*能输出正确hi运气好
首先int,4字节,他在内存中是反着存的,就是说内存中的a其实是F7 FF FF FF
你定义的char*b,其实b指向的就是F7,由于 定义的是有符号的,所以前面多了6个F,无符号就能正确.
还有就是printf("%08x", *b);这东西是无法输出4字节的,
printf("%02x", *b);
printf("%02x", *(b+1));用这样来输出
再问: 验证了一下,确实是个巧合,和a的值有关,如果a是FFFFFF07的话就输出是07,此外printf没有影响。我想问一下,为什么用char*的时候会多输出6个F呢?b应该是指向一个字节的内容,为什么输出的时候会有4个字节内容?(验证过和printf没有关系)谢谢
再答: 多6个F是因为符号位的缘故 char 8位,第一位是符号位,如果是负的,则用%x输出会多6个F