想知道 ch0 ch1怎么求

想知道ch0 ch1的101和141是怎么来的
想知道ch0 ch1的101和141是怎么来的

img

画了个图,解读再图片里了
希望能帮到你

img

注意我这里是按小端序存放到内存的,如果是大端序ch[0],ch[1]调换
代码运行实践验证,如图

img


#include<stdio.h>
void main()
{
    union int_char
    {
        int i;
        char ch[2];
    } x;
    x.i=24897;
    printf("i=%o\n",x.i);
    printf("ch0=%o,ch1=%o\nch0=%c,ch1=%c\n",x.ch[0],x.ch[1],x.ch[0],x.ch[1]);
}

union是i和char[2]共享内存,int是四个字节,假设所占空间为[a][b][c][d],每个[]表示一个字节,char长度是一个字节,char[0]就存储在[d]中,char[1]就存储在[c]中
x.i=24897,为了方便计算转16进制是6141,因为16进制的每个位表示二进制的4个位,所以16进制的每两个位表示长度是一个字节,所以此时内存中[00][00][61][41],所以char[0]=41,41是十六进制,转八进制就是101,同理char[1]=61,转八进制141