1. 程式人生 > >寫一個巨集可以將一個數字的奇數位和偶數位交換。使用巨集實現兩個數中求較大值。

寫一個巨集可以將一個數字的奇數位和偶數位交換。使用巨集實現兩個數中求較大值。

1.


#include <stdio.h>
#define SWAP(x) (((x&(0x55555555)) << 1) | ((x&(0xAAAAAAAA)) >> 1))
//0x55555555是十六進位制的10101010101010101010101010101010,
int main()
{
	int x = 0;
	printf("請輸入一個數字\n");
	scanf_s("%d", &x);
	printf("%d\n", SWAP(x));
	return 0;
}

//0x55555555是十六進位制的10101010101010101010101010101010, //將(x&(0x55555555))<<1; x按位與0x55555555後得到的二進位制奇數位與x相同但偶數位均為0,然後再向左移一位,變成偶數位為原來的奇數位,且移動後奇數位全為0;

//將(x&(0xAAAAAAAA))>>1; x按位與0xAAAAAAAA後得到的二進位制偶數位與x相同但奇數位均為0,然後再向右移一位,變成奇數位為原來的偶數位,且移動後偶數位全為0;

//最後將兩個二進位制按位或((x&(0x55555555))<<1) | ((x&(0xAAAAAAAA))>>1),便最終得到了交換後的數。

2.

#include <stdio.h>
#define MAX(a,b) a>b?a:b

int main()
{
	int x = 10;
	int y = 15;
	printf("兩個數字中較大的是%d\n", MAX(x, y));
	return 0;
}