基础的十进制按位运算总结与在Python中的计算示例


Posted in Python onJune 28, 2016

与运算 &
举例:
3&5                       
解法:3的二进制补码是 11,  5的是101, 3&5也就是011&101,先看百位(其实不是百位,这样做只是便于理解) 一个0一个1,根据(1&1=1,1&0=0,0&0=0,0&1=0)可知百位应该是1,同样十位上的数字1&0=0,个位上的数字1&1=1,因此最后的结果是1.(这之后本来应该还有一步,因为我们现在得到的数值只是所求答案的补码,但是因为正数的补码即是它本身,所以就省略了。不过,下面的例子就不能省略最后这一步了).   
-1&-2
解法:-1的补码是11111111,  -2的补码是11111110, 11111111&11111110得到的结果是:11111110,这个是补码,再转化位原码为100000010 (负数转换位原码的方法是减一取反),最后转换为十进制是 -2.
-2&6  
解法:-2的补码是11111110,  6的补码是110,   11111110&110,也就是11111110&00000110(这样写的目的是让初学者能够更好理解按位运算),按照上面的方法得到的结果是:110,转化位十进制就是6.
小技巧:利用按位与可以将任意二进制数的最后一位变为0,即就是X&0.

eg:

a = 5
b = 3

print a & b

结果: 1
这是怎么算的呢,其实是通过a和b的二进制算的。

# a 的 b 的二进制
# 0*2**3 + 1*2**2 + 0*2**1 + 1*2**0
# 开始与运算
a = 0101
b = 0011

结果:0001
与运算就是比较a和b的二进制如果位数都为1则算为1,如果不想同或都为0则算为0。然后再把答案的二进制转为10进制。

或运算 |
举例:
4|7
解法:按位并的计算规律和按位与的很相似,只不过换了逻辑运算符,并的规律是: 1|1=1 ,1 |0=1, 0|0=0.   4|7转换位二进制就是:100|111=111.  二进制111即为十进制的7.
小技巧:利用按位并可以将任意二进制数的最后一位变为1,即就是X|1.
eg:

a = 5
b = 3

print a | b

结果: print  7

a = 0101
b = 0011

a | b结果是:0111
或运算正好与与运算相反,如果位数都不为0则算为1,否则算为0。

异或操作
方法:对位相加,特别要注意的是不进位.     
举例:
2^5
解法:10^101=111,二进制111得到十进制的结果是7.
1^1
解法:1+1=0.(本来二进制1+1=10,但不能进位,所以结果是0)
-3^4
解法:-3的补码是11111101,4的补码是100 (也即00000100),11111101^00000100=11111101,补码11111101转为原码是1000111,即十进制的-7.

a = 5
b = 3

print a ^ b

结果:6

a = 0101
b = 0011

a ^ b 结果是0110
异或操作是位数不想同则算为1,否则算为0。

左移与右移
1.左移运算符  <<
方法:X<<N 将一个数字X所对应的二进制数向左移动N位.
举例:
3<<2
解法:11向左移动两位变为1100,即12 .

2.右移动运算符  >>
方法:X>>N 将一个数字X所对应的二进制数向右移动N位.
举例:
3>>2
解法:11向右移动两位变为0.
10>>1
解法:10的二进制是1010,向右边移动一位是101,即5.

a = 5
b = 2

print a << b
结果是20       
a = 0101
b = 2

a << b结果:10100
位移运算会把二进制数向左或向右移动,如上就是向左移动了2个单位。

Python 相关文章推荐
实例讲解Python中SocketServer模块处理网络请求的用法
Jun 28 Python
Python读写Json涉及到中文的处理方法
Sep 12 Python
Python中optparser库用法实例详解
Jan 26 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
Oct 15 Python
python执行CMD指令,并获取返回的方法
Dec 19 Python
使用Python在Windows下获取USB PID&amp;VID的方法
Jul 02 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
Oct 24 Python
利用pyecharts读取csv并进行数据统计可视化的实现
Apr 17 Python
浅谈Django前端后端值传递问题
Jul 15 Python
Python自动化测试中yaml文件读取操作
Aug 20 Python
用Python进行websocket接口测试
Oct 16 Python
Pandas中DataFrame交换列顺序的方法实现
Dec 14 Python
Python中的with语句与上下文管理器学习总结
Jun 28 #Python
深入解析Python中的上下文管理器
Jun 28 #Python
详解Python中contextlib上下文管理模块的用法
Jun 28 #Python
实例讲解Python中SocketServer模块处理网络请求的用法
Jun 28 #Python
Python中asyncore异步模块的用法及实现httpclient的实例
Jun 28 #Python
python 字典(dict)按键和值排序
Jun 28 #Python
简单谈谈python的反射机制
Jun 28 #Python
You might like
蝙蝠侠:侠影之谜
2020/03/04 欧美动漫
使用Apache的htaccess防止图片被盗链的解决方法
2013/04/27 PHP
请离开include_once和require_once
2013/07/18 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
2016/11/01 PHP
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
2007/06/29 Javascript
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
Javascript实现代码折叠功能
2016/08/25 Javascript
JSON与XML的区别对比及案例应用
2016/11/11 Javascript
使用JS代码实现点击按钮下载文件
2016/11/12 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
详解vue跨组件通信的几种方法
2017/06/15 Javascript
简单明了区分escape、encodeURI和encodeURIComponent
2018/05/26 Javascript
JS forEach跳出循环2种实现方法
2020/06/24 Javascript
玩转python爬虫之正则表达式
2016/02/17 Python
python简单图片操作:打开\显示\保存图像方法介绍
2017/11/23 Python
Django 创建/删除用户的示例代码
2019/07/24 Python
python性能测量工具cProfile使用解析
2019/09/26 Python
python numpy中cumsum的用法详解
2019/10/17 Python
详解PyQt5信号与槽的几种高级玩法
2020/03/24 Python
使用Html5、CSS实现文字阴影效果
2018/01/17 HTML / CSS
HTML5之SVG 2D入门7—SVG元素的重用与引用
2013/01/30 HTML / CSS
如何给HTML标签中的文本设置修饰线
2019/11/18 HTML / CSS
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
Parfumdreams英国:香水和化妆品
2019/05/10 全球购物
化学专业毕业生自荐信
2013/11/15 职场文书
师范大学毕业自我鉴定
2013/11/21 职场文书
2013的个人自我评价
2013/12/26 职场文书
设备动力科岗位职责范本
2014/02/23 职场文书
期末评语大全
2014/05/04 职场文书
质量月口号
2014/06/20 职场文书
国家税务局领导班子对照检查材料思想汇报
2014/10/04 职场文书
聘任书的格式及模板
2019/10/28 职场文书
opencv 分类白天与夜景视频的方法
2021/06/05 Python
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android
nginx配置之并发频次限制
2022/04/18 Servers
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS