第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课 位运算符分析的主要内容,如果未能解决你的问题,请参考以下文章