Definir la macro para intercambiar los bits de paridad de números enteros

Soluciones

1. Primero, debes quitar los dígitos pares e impares

2. Saque los dígitos pares: pass & 0101 0101 0101 ... El valor predeterminado es un entero de 32 bits, y los cuatro bits binarios corresponden a un dígito hexadecimal, por lo que finalmente se obtienen 8 5s, es decir, se toman los dígitos pares fuera por & 0x55555555

3. Saque los dígitos impares: pasa & 1010 1010 1010 ... el valor predeterminado es un entero de 32 bits, y cuatro bits binarios corresponden a un dígito hexadecimal, por lo que finalmente se obtiene 8 a, es decir, los dígitos impares se eliminan con & 0xaaaaaaaa

4. Mueva el bit de número impar a la derecha un bit al bit de número par, y mueva el bit de número par a la izquierda un bit al bit de número impar.

5. Los dos últimos dígitos o más para completar el intercambio.

Nota: El bit de paridad aquí se cuenta a partir del bit como 0, 0 es par, 1 es impar ...

Código:

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

resultado de la operación:

Supongo que te gusta

Origin blog.csdn.net/weixin_43939602/article/details/110337045
Recomendado
Clasificación