码迷,mamicode.com
首页 > 其他好文 > 详细

第16课 位运算符分析

时间:2018-08-25 23:29:41      阅读:413      评论:0      收藏:0      [点我收藏+]

标签:9.png   编译   amp   变量   运行   idt   加法   efi   语言   

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\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非常大的时候会造成溢出。

运行结果如下:

技术分享图片

 

 

位运算与逻辑运算:

技术分享图片

 

示例如下:

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

运行结果如下:

技术分享图片

 

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

 

小结:

技术分享图片

 

第16课 位运算符分析

标签:9.png   编译   amp   变量   运行   idt   加法   efi   语言   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!