首先介绍操作符与位操作符的区别,位操作是程序设计中对位模式按位或二进制数的一元和二元操作。

在许多的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多。

有时候合理利用一个位操作符,可以帮助我们少些十几行代码。

一个最常见的:
(exp1)? exp2:exp3

移位操作符。

左移位操作符。

<<

将二进制序列左边抛弃,右边补0;
如:

int i=1;
00000000000000000000000000000001
i<<1;
00000000000000000000000000000010

右移位操作符。

>>

如同左移位操作符但又有不同。
如果该数为负数则右边抛弃,左边补1。
如果该数为正数则右边抛弃,左边补0。

接下来的按位操作符放一起讲。
按位与“&”:俩个二进制序列同一位上都是1则为1,其余为零。
按位或"|":俩个二进制序列同一位上有1则为1,其余为零。
按位异或“^”:俩个二进制序列同一位上都是1则为零。

知道安位操作符的性质,我们不妨写一些代码来看看他们具体有什么作用。

1. 不允许创建临时变量,交换两个整数的内容

#define _CRT_SECURE_NO_WARINGS 1
#include <stdio.h>
int main()
{int a = 3;int b = 5;a = a + b;//方法一b = a - b;a = a - b;printf("a=%d b=%d\n", a, b);a = 3;b = 5;a = a^b;//方法二,按位异或,该方法执行效率更好b = a^b;a = a^b;printf("a=%d b=%d\n", a, b);return 0;
}

运行结果:

2. 写一个函数返回参数二进制中 1 的个数。
例如: 15 0000 1111 4 个 1

#include<stdio.h>
int sum_bit_1(unsigned int n);//方法一
int sum_bit_2(unsigned int n);//方法二
int sum_bit_3(unsigned int n);//方法三
int main()
{int n = 0;int ret1 = 0;int ret2 = 0;int ret3 = 0;printf("输入要求的数\n");scanf_s("%d", &n);ret1=sum_bit_1(n);//接受返回来的1的个数ret2=sum_bit_2(n);ret3=sum_bit_3(n);printf("ret1=%d\n", ret1);printf("ret2=%d\n", ret2);printf("ret3=%d\n", ret3);return 0;
}
int sum_bit_1(unsigned int n)
{int count = 0;while (n)//只要是非零就可进入循环{if (n % 2 == 1)count++;n = n / 2;}return count;
}
int sum_bit_2(unsigned int n)
{int count = 0;int i = 0;for (i = 0; i < 32;i++)//将32个比特位依次右移{if (((n >>i)& 1) == 1)//与1进行相与看不懂可自行写二进制序列{count++;}}return count;
}
int sum_bit_3(unsigned int n)
{int count = 0;while (n){n=n&(n - 1);//按位与的非常有用的一个性质,与他本身小一相与一次其二进制序列数少一个1count++;}return count;
}

运行结果:

阅读代码可知,sum-bit_1用的是普通函数,sum_bit_2用的his移位操作符,sum_bit_3用的是按位异或操作符。

我们分析其时间复杂度和空间复杂度可知,一方法为n次,二方法为32次,三方法为二进制序列有多少个1执行多少次。所以方法三不管在时间复杂度还是空间复杂度都优于方法一和二。

4. 编程实现:
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?

输入例子:

1999 2299

输出例子:7

#include<stdio.h>
int main()
{int n = 0;int m = 0;int i = 0;int count = 0;printf("输入俩个整数\n");scanf_s("%d%d", &m, &n);for (i = 0; i < 32; i++){if (((m >> i) & 1) != ((n >> i) & 1))count++;}printf("不同比特位的数目为:%d\n", count);return 0;
}

运行结果:

高级操作符——位操作符讲解(移位操作符~ 按位与''操作符~ 按位或'|'操作符~ 按位异或'^'操作符)相关推荐

  1. 位运算中的按位与(),按位或(|),按位异或(^)

    大家好,今天和大家分享的是位运算符中的按位与,按位或,按位异或. 首先先声明一下:参加位运算的两个数都要用二进制来表示. 一般给的数都是十进制,十进制转化为二进制的方法如下: 注意:如果给的是八进制, ...

  2. c语言 10进制 按位与,位运算小结(按位与、按位或、按位异或、取反、左移、右移)...

    原标题:位运算小结(按位与.按位或.按位异或.取反.左移.右移) 位运算不管是在Java语言,还是在C语言中,或者其他语言,都是经常会用到的,所以本文也就不固定以某种语言来举例子了,原始点就从0.1开 ...

  3. 位运算(按位与、按位或|、按位异或^) 运算规则与实例

    位运算(按位与.按位或.按位异或) 按位与运算符(&) 参加运算的两个数,按二进制位进行"与"运算. 运算规则:同为1,结果为1,否则为0,即 0 & 0= 0 , ...

  4. 位运算小结(按位与、按位或、按位异或、取反、左移、右移)

    位运算小结(按位与.按位或.按位异或.取反.左移.右移) 位运算主要包括按位与(&).按位或(|).按位异或(^).取反(~).左移(<<).右移(>>)这几种,其中除 ...

  5. 位运算:按位与、按位或、按位异或、按位非(补码 反码)

    原码 补码 反码 计算机中的符号数有三种表示方法:原码.补码.反码.这三种表示方法都由符号位和数值位两部分组成,符号位1表示负数,0表示正数. 二进制数在内存中是以补码的形式存放的.为了更好理解计算机 ...

  6. 位运算:按位与、按位或、按位异或、按位左移、按位右移

    目录 一.基础知识补充 (1)位运算 (2)二进制的详细操作 二.位运算 (1)按位与(&) (2)按位或(|) (3)按位异或(^) (4)按位左移(<<) (5)按位右移(&g ...

  7. 按位与、按位或、按位异或、按位取反、按位左移、按位右移

    位运算符比一般的算术运算符速度要快,而且可以实现一些算术运算符不能实现的功能.如果要开发高效率程序,位运算符是必不可少的.位运算符用来对二进制位进行操作,包括:按位与(&).按位或(|).按位 ...

  8. 位操作符(按位与,按位或,按位异或)

    //整型变量的存储方式以及位运算均以补码方式进行:(正数原码反码补码均相同) 例如:-13 原码:10001101(原码的第一位表示符号位:1表示负数,0表示正数) 反码:11110010(符号位不变 ...

  9. 位操作符【左移、右移、按位取反、按位与、按位或、按位异或】【详解】

    本期介绍

  10. 位运算(按位与 、按位或、按位异或、取反、左移右移)

    位运算 与(&) 0&0=0 0&1=0 1&0=0 1&1=1 或(|) 0|0=0 0|1=1 1|0=1 1|1=1 异或(^) 0^0=0 0^1=1 ...

最新文章

  1. java连连看(GUI)
  2. 怎么转换html格式文件怎么打开,html格式怎么转换
  3. c语言如何设置c99标准,新的C语言: C99标准介绍
  4. Java基础--通过反射获取私有的成员方法示例代码
  5. html如何使文本变为粗体_javascript – 如何使用节点和.createElement(“b”)使文本变为粗体?...
  6. Linux下内存问题检测神器 valgrind
  7. 光伏电站清扫机器人_轻型光伏电站清扫机器人的制作方法
  8. 201621123080《Java程序设计》第十一周学习总结
  9. Linux上传文件和下载文件命令行方式
  10. java html5 上传_HTML5结合ajax实现文件上传以及进度显示
  11. 生成 oracle 连接串,Generator连接Oracle数据库生成Model报错
  12. vue+elementUI的el-form的回车键登录
  13. eclipse中出现代码覆盖的颜色信息,如何去掉
  14. 《全局光照技术》在摩点网发起众筹活动
  15. php文件同名怎么办,php根据文件不同关闭同名进程
  16. 数据分析实战项目:SQL分析淘宝用户行为
  17. VSTO之一:Word外接程序
  18. roboware studio安装
  19. 遗传算法求解多约束、多类型车辆、多目标优化的车辆路径问题
  20. openwrt校园网自动登录且断网重连

热门文章

  1. eas java配置_EAS客户端调试环境搭建
  2. shmget函数与shmat
  3. 滤了asa,cer,cdx,php,aspx等脚本类型的上传情况下添加一个ashx的上传类型
  4. 软考信息系统项目管理师论进度管理范文
  5. MySql基本查询、连接查询、子查询、正则表达查询讲解
  6. Mixamo生成模型导入Unreal4使用官方动画包
  7. Semantic Kernel 入门系列
  8. 创业粉去哪里引流?如何精准引流创业粉?创业粉的引流技巧
  9. android measure
  10. 有什么编辑图片加文字的软件?今日推荐:图片编辑软件加文字