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

 

posted @ 2024-08-22 09:24  java帝国  阅读(7)  评论(0)    收藏  举报