用巨集實現函式—1.寫一個巨集可以將一個數字的奇數位和偶數位交換 2.求兩個數中求較大值
阿新 • • 發佈:2018-11-14
交換奇數位和偶數位的方法:
1.奇數位與1偶數位與0得到奇數位 num&0101 0101 0101 0101 0101 0101 0101 0101
2.奇數位與0偶數位與1得到偶數位 num&1010 1010 1010 1010 1010 1010 1010 1010
3.奇數位左移一位,偶數位右移一位分別得到交換的奇偶位
4.兩者或後得到交換後的數的二進位制數
具體程式碼部分:
效果展示: 10和20的較大值是15
1.奇數位與1偶數位與0得到奇數位 num&0101 0101 0101 0101 0101 0101 0101 0101
2.奇數位與0偶數位與1得到偶數位 num&1010 1010 1010 1010 1010 1010 1010 1010
3.奇數位左移一位,偶數位右移一位分別得到交換的奇偶位
4.兩者或後得到交換後的數的二進位制數
具體程式碼部分:
#include<stdio.h> #include<windows.h> #define EXCHANGE(num) (((num)&0x55555555)<<1)|(((num)&0xaaaaaaaa)>>1) //0x是十六進位制 //奇數位與1偶數位與0得到奇數位 num&0101 0101 0101 0101 0101 0101 0101 0101 //奇數位與0偶數位與1得到偶數位 num&1010 1010 1010 1010 1010 1010 1010 1010 //奇數位左移一位,偶數位右移一位分別得到交換的奇偶位 //兩者或後得到交換後的數的二進位制數 int main() { int num = 0; scanf_s("%d", &num); printf("交換前:%d\n", num); int num1 = EXCHANGE(num); printf("交換後:%d\n", num1); system("pause"); return 0; }
效果展示:
5的二進位制數是0101
交換後10
的二進位制數是1010
巨集實現兩個數的較大值
#include <stdio.h> #include <windows.h> #define MAX(a,b) (a)>(b)?(a):(b) //兩個數較大值 條件操作符 int main() { int a = 20; int b = 10; int max = MAX(a, b); printf("max=%d", max); system("pause"); return 0; }
效果展示: 10和20的較大值是15