23.位运算【郝斌C语言入门学习】
位运算
& -- 按位与
&& 逻辑与也叫并且
&&与&的含义完全不同
1&1 = 1
1&0 = 0
0&1 = 0
0&0 = 0
例题:
1 # include <stdio.h> 2 int main(void) 3 { 4 int i = 5;//0101 5 int j = 7;//0111 6 int k; 7 k = i & j;//按位与,结果是0000 8 printf("%d\n", k); 9 k = i && j;//逻辑与,结果只能真或假。 10 printf("%d\n", k); 11 return 0; 12 } 13 /* 14 在vc++6.0中的输出结果:5 15 1 16 */
| -- 按位或
|| 逻辑或
| 按位或
1|0 = 1
1|1 = 1
0|1 = 1
0|0 = 0
~ -- 按位取反
~i 就是把变量i各位取反
例题:
1 # include <stdio.h> 2 int main(void) 3 { 4 int i = 3;//0011 5 int j = 5;//0101 6 int k; 7 k = i | j;//按位或 0000 0111 8 printf("%d\n", k); 9 k = ~i;//1111 1111 1111 1111 1111 1111 1111 1100 10 printf("%d\n", k); 11 return 0; 12 } 13 /* 14 在vc++6.0中的输出结果:7 15 -4 16 */
^ -- 按位异或 相同为0 不同为1
1^0 = 1
0^1 = 1
1^1 = 0
0^0 = 0
<< -- 按位左移
i<<1 表示把i所有二进制位左移一位
左移n位相当于乘以2的n次方
面试题:
A)i = i * 8;
B)i = i << 3;
请问上述两个语句,那个语句执行的速度快 答案:B
>> -- 按位右移
i >> 3 表示把i的所有二进制位右移3位,左边一般是0,右移n位相当于除以2的n次方
前提是数据不能丢失。
面试题:
A)i = i / 8;
B)i = i >> 3;
请问上述两个语句,那个语句执行的速度快 答案:B
位运算的现实意义:通过位运算符我们可以对数据的操作精确到每一位
文件 宏 typedef

浙公网安备 33010602011771号