第16课 位运算符分析

C语言中的位运算符:

第16课 位运算符分析_第1张图片

 

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

左移和右移:

第16课 位运算符分析_第2张图片

 

 

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

有趣的问题:

第16课 位运算符分析_第3张图片

 

示例程序如下:

第16课 位运算符分析_第4张图片

 

运行结果如下:

第16课 位运算符分析_第5张图片

 

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

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

第16课 位运算符分析_第6张图片

 

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

第16课 位运算符分析_第7张图片

 

小贴士:

第16课 位运算符分析_第8张图片

 

交换两个变量的值:

 1 #include 
 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\n", a); 
31     printf("b = %d\n", b); 
32     
33     SWAP3(a ,b);
34     
35     printf("a = %d\n", a); 
36     printf("b = %d\n", b); 
37     
38     return 0;
39 }

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

运行结果如下:

第16课 位运算符分析_第9张图片

 

 

位运算与逻辑运算:

第16课 位运算符分析_第10张图片

 

示例如下:

 1 #include 
 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...\n");
12     }
13     
14     return 0;
15 }

运行结果如下:

 

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

 

小结:

第16课 位运算符分析_第11张图片

 

转载于:https://www.cnblogs.com/wanmeishenghuo/p/9535770.html

你可能感兴趣的:(第16课 位运算符分析)