字节高低位互换,蝶式交换
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
十六进制 | 二进制 |
---|---|
0x33 | 00110011 |
0xaa | 10101010 |
0x55 | 01010101 |
0xcc | 11001100 |