第16课 位运算符分析

C语言中的位运算符:

C语言中的位运算效率是最高的。比四则运算效率高很多。

左移和右移:

右操作数超出范围后,行为是不确定的。

有趣的问题:

示例程序如下:

运行结果如下:

从结果可以看出,第8行的混合运算先算的是加法。

vc编译器的输出结果如下:

bcc编译器的输出结果如下:

小贴士:

交换两个变量的值:

 1 #include <stdio.h>
 2 
 3 #define SWAP1(a, b)    
 4 {                      
 5     int t = a;         
 6     a = b;             
 7     b = t;             
 8 }
 9 
10 #define SWAP2(a, b)    
11 {                      
12     a = a + b;         
13     b = a - b;         
14     a = a - b;         
15 }
16 
17 #define SWAP3(a, b)    
18 {                      
19     a = a ^ b;         
20     b = a ^ b;         
21     a = a ^ b;         
22 }
23 
24 int main()
25 {
26     int a = 1;
27     int b = 2;
28     
29     
30     printf("a = %d
", a); 
31     printf("b = %d
", b); 
32     
33     SWAP3(a ,b);
34     
35     printf("a = %d
", a); 
36     printf("b = %d
", b); 
37     
38     return 0;
39 }

 SWAP1会借助于第三个变量,SWAP2会有隐患,a或者b非常大的时候会造成溢出。

运行结果如下:

位运算与逻辑运算:

示例如下:

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int i = 0;
 6     int j = 0;
 7     int k = 0;
 8     
 9     if( ++i | ++j & ++k )
10     {
11         printf("Run here...
");
12     }
13     
14     return 0;
15 }

运行结果如下:

这里的++i,++j,++k都会得到执行,因为它们之间使用的是位运算符,没有短路规则。

小结:

原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9535770.html