一、蝶式交换法
将十六进制数12345678 转换为87654321并输出
#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
//设原始位为 1234 5678
int data = 0x12345678;
data = (data << 16) | (data >> 16);
//data<<16,数据左移16位,5678 0000;data>>16,数据右移16位,0000 1234;|按位或 ,之后位序为 5678 1234
data = ((data << 8) & 0xff00ff00) | ((data >> 8) & 0x00ff00ff);
//5678 1234 data<<8左移8位,7812 3400;&按位与ff00 ff00,得7800 3400;data>>8,
// 右移8位,0056 7812,位与00ff 00ff,得0056 0012;位或之后位序为 7856 3412
data = ((data << 4) & 0xf0f0f0f0) | ((data >> 4) & 0x0f0f0f0f);
//7856 3412左移4位8563 4120,位与f0f0 f0f0得8060 4020;右移4位 0785 6341,
// 位与0f0f 0f0f得0705 0301,;位或之后位序为 8765 4321
printf("data = %#x\n", data);
return 0;
}
持续更新。。。