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

用巨集實現函式—1.寫一個巨集可以將一個數字的奇數位和偶數位交換 2.求兩個數中求較大值

 交換奇數位和偶數位的方法:
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