A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wslinke 中级黑马   /  2015-4-18 15:38  /  715 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wslinke 于 2015-4-18 15:43 编辑


1.按位与
二进制运算符&通过对两个操作数逐位进行比较产生一个新值.对于每个位,只有两个操作数的对应位都为1时结果才为1

```
10110110
&
11011000
=
10010000
```
2.按位或
二进制运算符|通过对两个操作数逐位进行比较产生一个新值.对于每个位,只要有一个操作数的对应位为1时结果就为1

  1. 10110110
  2. |
  3. 11011000
  4. =
  5. 11111110
复制代码


3.按位异或
二进制运算符^通过对两个操作数逐位进行比较产生一个新值.对于每个位,只有两个操作数的对应位不相同时,结果才为1,即01得1, 10得1,00得0,11得0;
  1. 10110110
  2. ^
  3. 11011000
  4. =
  5. 01101110
复制代码

4.按位取反
二进制运算符~对一个操作数逐位进行取反,0变1,1变0
  1. 10110110
  2. ~
  3. =
  4. 01001001
复制代码


5.左移
将<<左侧操作数的值的每位向左移动,移动的位数由右侧操作数指定.空出的位用0填充,并丢弃被移出左端操作数左端的位

  1. 10010111 <<2
  2. 结果值
  3. 01011100
复制代码

6.右移
将>>左侧操作数的值的每位向右移动,移动的位数由右侧操作数指定.空出的位用0填充,并丢弃被移出左端操作数右端的位
  1. 10010111 >> 2
  2. 结果值
  3. 00100101
复制代码

最后补充:以上的位运算符都不会改变左操作数本身

附上使用位运算符来实现输出一个数的二进制数值的代码

  1. void print(int n)
  2. {
  3.         //先求得这个数一共有多少个字节,再乘以8得到位数,-1是为了右移计数
  4.     for (int i = (sizeof(n) << 3) -1  ; i >=0; i--) {
  5.             //将这个数右移i位,即将这个数第i+1位上的数取到第1位上
  6.             //再判断这个位上的值是否为1,输出它
  7.         printf("%d",n >> i & 1);
  8.         //每隔8位数字,打印一个逗号,以便查看结果
  9.         if (i % 8 == 0 && i!= 0) {
  10.             printf(",");
  11.         }
  12.     }
  13.    
  14. }
复制代码


QQ20150418-2@2x.png (82.53 KB, 下载次数: 51)

QQ20150418-2@2x.png

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马