整数のパリティビットを交換するマクロを定義します

ソリューション

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;
}

演算結果:

おすすめ

転載: blog.csdn.net/weixin_43939602/article/details/110337045