高低位字节翻转

在计算机中,我们将数据分割成了一个一个的字节(byte),而每个字节又有8位(bit)。一个字节,可以声明为unsigned char型数据,但是有时候不够用,毕竟一个UCHAR也就能表示0-255的数据。所以还会有short型(2字节),int型(4字节),浮点型float(4字节),double型(8字节)等等。
数据都是那些数据,但是有些计算机把值的低位存在低地址。有些计算机把值的高位存在低地址。不同CPU厂商大小端又不统一,例如,Motorala6800, PowerPC970等是大端,x86,VAX等是小端。这就要求不同计算机在交互的过程中可能需要进行大小端转换。
一、位移操作
在这里插入图片描述

二、蝶式交换法。这里我们用16位进行转换
在这里插入图片描述

蝶式法交换进行推演过程:
更抽象的来说原始位为 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
data = (data << 8) | (data >> 8);
这里之后序为 7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8
data = ((data << 4)&0xf0f0)|((data>>4)&0x0f0f);
之后序为3 2 1 0 7 6 5 4 11 10 9 8 15 14 13 12
data = ((data << 2)&0xcccc)|((data>>2)&0x3333);
之后序为1 0 3 2 5 4 7 6 9 8 11 10 13 12 15 14
data = ((data << 1)&0xaaaa)|((data>>1)&0x5555);
之后序为0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

三、查表法
查表法即就是将一些值存在内存中,在需要的时候查表即可,但是也会占用额外的存储空间。查表法主要是为了节省代码的执行时序,增加执行效率。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值