寫一個巨集可以將一個數字的奇數位和偶數位交換。使用巨集實現兩個數中求較大值。
阿新 • • 發佈:2018-12-09
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; }