定义宏实现交换两个变量

2019-03-11  本文已影响0人  吃柠檬的鸮

法一 使用位运算

#define SWAP(a, b) { a = a ^ b; b = b ^ a; a = a ^ b;} 

法二 使用算术运算,这种方法可能会产生数值溢出的问题

#define SWAP(a, b) { a = b - a; b = b - a; a = a + b;} 
#define SWAP(a, b) { a = a + b; b = a - b; a = a - b;}

法三 创建中间变量

#define SWAP(a, b, temp) {temp = a; a = b; b = temp;}   

一个完整的例子:

#include <stdio.h> 
                               
#define SWAP(a, b) { a = a ^ b; b = b ^ a; a = a ^ b;}     
#define SWAP2(a, b) { a = b - a; b = b - a; a = a + b;} 
#define SWAP3(a, b) { a = a + b; b = a - b; a = a - b;}
#define SWAP4(a, b, temp) {temp = a; a = b; b = temp;}   
                                      
void display(int a, int b) {      
    printf("i = %d, j = %d\n", a, b); 
}  
        
int main() {                        
    int i = 16, j = 32;         
    display(i, j);                             
                                          
    SWAP(i, j);            
    display(i, j);     
                             
    SWAP2(i, j);                    
    display(i, j); 
    SWAP3(i, j);                    
    display(i, j);          
                             
    int temp = 0;                          
    SWAP4(i, j, temp);      
    display(i, j);          
                     
    return 0;                                        
}    

编译运行结果:

i = 16, j = 32
i = 32, j = 16
i = 16, j = 32
i = 32, j = 16
i = 16, j = 32
上一篇 下一篇

猜你喜欢

热点阅读