大可爱 发表于 2018-10-13 21:45:15

高位对应a.s[1] 这是通过什么原理规定的

高位对应a.s 这是通过什么原理规定的

人造人 发表于 2018-10-13 21:52:14

#include <stdio.h>

union U
{
        char s;
        short i;
};

int main(void)
{
        union U u;
        printf("u: %.8X\n", &u);
        printf("u.s: %.8X\n", &u.s);
        printf("u.s: %.8X\n", &u.s);
        printf("u.i: %.8X\n", &u.i);
        printf("u.i: %.8X\n", sizeof(u.i));

        return 0;
}


u: 00AFF768
u.s: 00AFF768
u.s: 00AFF769
u.i: 00AFF768
u.i: 00000002
请按任意键继续. . .

人造人 发表于 2018-10-13 21:55:25

#include <stdio.h>

union U
{
        char s;
        short i;
};

int main(void)
{
        union U u;
        printf("u: %.8X\n", &u);
        printf("u.s: %.8X\n", &u.s);
        printf("u.s: %.8X\n", &u.s);
        printf("u.i: %.8X\n", &u.i);
        printf("u.i: %.8X\n", sizeof(u.i));

        u.i = 0x1234;
        for(int i = 0; i < 2; ++i)
        {
                unsigned char *p = (unsigned char *)&u;
                printf("%.8X -> %.2X\n", &p, p);
        }

        return 0;
}


u: 0027FA10
u.s: 0027FA10
u.s: 0027FA11
u.i: 0027FA10
u.i: 00000002
0027FA10 -> 34
0027FA11 -> 12
请按任意键继续. . .

wwhywhy 发表于 2018-10-13 22:16:52

人造人 发表于 2018-10-13 21:55


你这个保存的地址顺序是在intel机器上是对的,其它的就正好相反了

人造人 发表于 2018-10-13 22:20:08

wwhywhy 发表于 2018-10-13 22:16
你这个保存的地址顺序是在intel机器上是对的,其它的就正好相反了

举一个反例给我看

Ya_Ya 发表于 2018-10-14 10:28:20

这里应该是因为数据是小端存储的?即低位有效字节存在低地址,高位有效字节存在高地址

wwhywhy 发表于 2018-10-14 15:17:10

关于计算机的字节顺序:
一、字节序

字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端(Little-endian)、大端(Big-endian)两种字节顺序。
小端字节序指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处;
大端字节序是高字节数据存放在低地址处,低字节数据存放在高地址处。

二、分类及代表

现在主流的CPU,intel系列的是采用的little endian的格式存放数据;
而motorola系列的CPU采用的是big endian的格式存放数据;


举例说明,比如环境为32位机:
int i=1;

Big-endian方式下:   0x00            0x00             0x00             0x01

Little-endian方式下:0x01            0x00             0x00             0x00

地址:                  1000            1001             1002             1003


若强制转换指针类型为char * ,并获取i的地址,即从地址起点截断1个字节(为1000处)(char*)&i 。此时

Big-endian方式下为:0x00

Little-endian方式下为:0x01
页: [1]
查看完整版本: 高位对应a.s[1] 这是通过什么原理规定的