c++指针强制类型转换 unsigned int a = 0xFFFFFFF7; char*b = (char*)&a;
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/09/30 21:34:52
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,只输出了低字节,一个字节的内容,这是为什么?
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
首先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
char a = 100; char b = 150; unsigned char c ; c =(a < b)?a:b
unsigned char a[4] = {0,0,0,1};int b = *((int*)a); 这样执行完毕后,b
unsigned char ctoa(char a[])
下列赋值语句,不正确的是?A.char c='a' B.char c=“a“ C.char c=97 D.int c=‘
void fun (char *a,char *h,char *p) { int j=0; char *q=a; whi
以下合法的数组定义a.char a[]="string"; b.char a[6]="string";c.int a[5
main() { char a[]={'a','b','c','d'}; char *p=(char *)(&a+1);
#include main() { unsigned char a=8,c; c=a>>3; printf("%d\n"
unsigned short A = 10; printf("~A = %u\n",A); char c=128; pr
fun(char*a,char *b,char *c){while(*a&&*b){*c=*a; c++; a++;*c
#include void main() { unsigned char a,b; a=4|3; b=4&3; prin
int k=0; char c='A'; do { switch(c++) { case 'A':k++;break;