HTML/JavaScript小工具

HTML/JavaScript小工具

2021年4月7日 星期三

將二進位的當中為1的偶數與奇數位置交換

 將二進位的當中為1的偶數與奇數位置交換

/例如:
// 9 = 1001
// 3 2 1 0
// 1 0 0 1
//3 2交換
//1 0交換
//變為 0 1 1 0 = 6
//快速作法
//1 取偶數位 手動產生一組01010101...的數值 因為1在偶數位
//所以做&可以取得偶數位的1
//2 取奇數位 手動產生一組10101010...的數值 因為1在奇數位的1
//所以做&可以取得奇數位的1
//3 將步驟1的偶數位 向左偏移一格 就變為奇數位了
//4 將步驟2的奇數位 向右偏移一格 就變為偶數位了
//ex
// 1 0 0 1 9
// 0 1 0 1
//&======================
//0 0 0 1 偶數位

// 1 0 0 1 9
// 1 0 1 0
//&======================
//1 0 0 0 奇數位

// 0 0 0 1 << 1 = 0010
// 1 0 0 0 >> 1 = 0100

//5 將步驟3與步驟4的 做xor就可合併 因該也可以做or合併吧
// 0010 ^ 0100 = 0110
int n3 = 9;
int mask1 = 0x555555;//0101 正好是16進位的5
int mask2 = 0xaaaaaa;//1010 正好是16進位的a(10)
cout << ((n3 & mask1)<<1 ^ (n3 & mask2)>>1);

沒有留言:

張貼留言