第16课 位运算符分析

Posted wanmeishenghuo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第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都会得到执行,因为它们之间使用的是位运算符,没有短路规则。

 

小结:

技术分享图片

 

以上是关于第16课 位运算符分析的主要内容,如果未能解决你的问题,请参考以下文章

数据-第16课-栈的应用实战二

第18课 三目运算符和逗号表达式

第 七 课 go的运算符

第25课 #和##操作符使用分析

NLP第16课:动手实战中文句法依存分析

第16课 pycharm 使用