unsigned char a[4] = {0, 0, 0, 1};int b = *((int*)a); 这样执行完毕后,b的值是多少?
发布网友
发布时间:2022-06-28 22:59
我来回答
共4个回答
热心网友
时间:2023-10-11 00:30
一、首先我们来分析一下为什么是16777216:int b = *((int*)a);的执行过程,为此另外定义一个变量:
int *p;
p = (int*)a;
实际上此时p为一个指向整数的指针,其地址与a相同。
此时: b = *((int*)a); 与 b= *p;是相同的值。
一个整数是4个字节,而unsigned char a[4]也是四个字节,字符串存放顺序是从左至右依次存放,在内存中按字节从地到高,依次是:0 0 0 1
整数也是4个字节,也是从低到高存放,恰好与字符数组占用的地址和大小完全相同,从低到高也是:0 0 0 1,对应的16进制整数就是0X01000000,也就是十进制的16777216。
二、字符数组转成int的方法
有两种转换方法,其一即认为先出现的是低位,就是上述分析的情况;其二就是先出现的是高位,那么则要重新计算,从最后一个字符开始循环执行:
int sum = 0;
for(int i=4,i>0;i--)sum = sum*10+a[i-1];
热心网友
时间:2023-10-11 00:31
整型变量四个字节,在微机中是低位字节在前,高位字节在后,你把最高一字节置成1,结果当然就是一个老大的数啦
你想要1得这么定:unsigned char a[4] = {1, 0, 0, 0};
而后 int b = *((int*)a); 此时 b==1
在8位系统的单片机中,整型变量是高字节在前的,单片机用的是C51,你用C/C++就表示不是8位的单片机,而无论16位32位还是64位,那个short,int,long等整型都是低位字节在前高位字节在后的
热心网友
时间:2023-10-11 00:31
一个int是4个字节,一个char是一个字节
int b = *((int*)a); //这个赋值就是把数组a的地址当作一个int的地址,那么这个数组4个字节的内容就形成了一个int:
0x00 0x00 0x00 0x01,intel内存体系是低位在前那这个值就是0x01000000,换算成10进制就是16777216
你说的怎么才能从unsigned char[4]正确的转换为一个int的值,这个说的很模糊,按你的预期是要转换成什么值呢
热心网友
时间:2023-10-11 00:32
转换一个int 型的话就 (int)a[3]就等于1了。