高位、地位、高地址、低地址

概念:

高位、低位:

一般左边为高位 右边为低位

高低地址:

地址大的为高地址,地址小的为低地址。

判断为大端还是小端:

#include <stdio.h>
 union {
        int i;
        char c[sizeof(int)];
    } u;
int main()
{
    u.i = 0x12345678;
    printf("%0x\n",u.c[0]);
       
    return 0;
}

输出: 

78

输出0x78:c[0]为低地址,0x78为低位,为小端。反之则为大端

大小端转换

小转大:在以上代码加入位移,位移多少根据变量类型。

int一共4个字节,最多位移3个字节即24位。

#include <stdio.h>
 union {
        int i;
        char c[sizeof(int)];
    } u;
int main()
{
    u.i = 0x12345678;
	u.i = ((u.i >> 24) & 0x000000FF) |
           ((u.i >> 8) & 0x0000FF00) |
           ((u.i << 8) & 0x00FF0000) |
           ((u.i << 24) & 0xFF000000);
    printf("%0x\n",u.c[0]);
       
    return 0;
}

输出: 

12

大转小同理:

#include <stdio.h>
 union {
        int i;
        char c[sizeof(int)];
    } u;
int main()
{
    u.i = 0x12345678;
	u.i = ((u.i >> 24) & 0x000000FF) |//0x00000012 & 0x000000FF 
           ((u.i >> 8) & 0x0000FF00) |//0x00123456 & 0x0000FF00
           ((u.i << 8) & 0x00FF0000) |//0x34567800 & 0x00FF0000
           ((u.i << 24) & 0xFF000000);//0x78000000 & 0xFF000000
    printf("%0x\n",u.c[0]);//小转大0x78563412
	printf("%0x\n",u.i);
    u.i = ((u.i >> 24) & 0x000000FF) |
           ((u.i >> 8) & 0x0000FF00) |
           ((u.i << 8) & 0x00FF0000) |
           ((u.i << 24) & 0xFF000000);
	printf("%0x\n",u.c[0]);//大转小
	printf("%0x\n",u.i);
    return 0;
}

输出:

12
78563412
78
12345678

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值