ソリューション
1.まず、奇数桁と偶数桁を取り出す必要があります
2.偶数桁を取り出します。pass&0101 0101 0101 ...デフォルトは32ビット整数で、4つの2進数は16進数に対応しているため、最終的に8 5が取得されます。つまり、偶数桁が取得されます。 &0x55555555によって
3.奇数桁を取り出す:pass&1010 1010 1010 ...デフォルトは32ビット整数で、4つのバイナリビットは16進数に対応するため、最終的に8 aが取得されます。つまり、奇数桁は&によって取り出されます。 0xaaaaaaaa
4.奇数ビットを右に1ビットずつ偶数ビットにシフトし、偶数ビットを左に1ビットシフトして奇数ビットにします。
5.交換を完了するための最後の2桁以上。
注:ここでのパリティビットは、ビットから0、0は偶数、1は奇数としてカウントされます。
コード:
#include<stdio.h>
#include<stdlib.h>
#define SWAP(n) ((n&0x55555555)<<1 |(n&0xaaaaaaaa))>>1)
int main()
{
int num = 10;
printf("%d-%d\n", num, SWAP(num);
system("pause");
return 0;
}