字节高低位互换,蝶式交换

字节高低位互换,蝶式交换

1、首先区分高低字节、高低地址、大小端模式和数据存储顺序。

(1)高低字节:

int a=16909060,十六进制为0x01020304,则04为低字节,01为高字节

(2)高低地址:
高低地址

(3)大小端模式:

i.大端模式:高位字节存低地址
在这里插入图片描述

ii.小端模式:高位字节存高地址
在这里插入图片描述

(4)数据存储顺序:

i.一个整数类型内部

低地址存储低位,高地址存储高位。比如int a=1,则存储情况为0000(高地址) 0000 0000 0001(低地址)。

ii.若干个局部变量(在栈中存储的)

先定义的高地址,后定义的低地址。

iii.类、结构体或数组的元素

先定义的低地址,后定义的高地址。

2、二进制(Bin)、八进制(Oct)、十进制(Dec)、十六进制(Hex)转换规则

二进制转换:2^0 =1, 2^1=2, 2^2=4, 2^3=8,……,16,32,64,128,256,512,1024(求和计算,确定二进制为1的位)

八进制转换:十进制/8+十进制%8

十六进制转换:十进制/16+十进制%16

3、二进制左移(<<)、右移(>>)

(1)左移:前面去掉几位,后面加几个0

(2)右移:后面去掉几位,前面加几个0

ps:左移一位相当于乘2,右移一位相当于除2

4、例题:请写出程序,实现高低位互换:

Data[10]={0x98, 0x68, 0x00, 0x52, 0x21, 0x37, 0x50, 0x41, 0x38, 0x27 },

转换后为 0x89,0x86,0x00,0x25,0x12,0x73,0x05,0x14,0x83,0x27

private static byte exchangeHighLowByte(byte i) {
    byte x = (byte) ((i << 4) & 0xf0); //左移4位和 11110000与运算 低位变高位
    byte y = (byte) ((i >> 4) & 0x0f);//右移4位和 00001111与运算 高位变低位
    return (byte) (x + y); //高位低位相加得到高地位互换。
}

5、蝶式交换

设置原始位为 1 2 3 4 5 6 7 8

data=(data<<4)|(data>>4); //之后位序为 5 6 7 8 1 2 3 4

data=((data<<2)&0xcc)|((data>>2)&0x33); //之后位序为 7 8 5 6 3 4 1 2

data=((data<<1)&0xaa)|((data>>1)&0x55); //之后位序为 8 7 6 5 4 3 2 1
十六进制二进制
0x3300110011
0xaa10101010
0x5501010101
0xcc11001100
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值