基础的十进制按位运算总结与在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 functools模块学习总结
May 09 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
Apr 28 Python
Python操作mongodb的9个步骤
Jun 04 Python
Python WEB应用部署的实现方法
Jan 02 Python
python pandas写入excel文件的方法示例
Jun 25 Python
pytorch 自定义数据集加载方法
Aug 18 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
May 26 Python
python 下划线的不同用法
Oct 24 Python
Python实现PS滤镜中的USM锐化效果
Dec 04 Python
python爬取抖音视频的实例分析
Jan 19 Python
pyqt5蒙版遮罩mask,setmask的使用
Jun 11 Python
分位数回归模型quantile regeression应用详解及示例教程
Nov 02 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
PHP IN_ARRAY 函数使用注意事项
2010/07/24 PHP
PHP转换IP地址到真实地址的方法详解
2013/06/09 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
PHP处理数组和XML之间的互相转换
2016/06/02 PHP
PHP生成制作验证码的简单实例
2016/06/12 PHP
php外部执行命令函数用法小结
2016/10/11 PHP
Yii2 加载css、js 载静态资源的方法
2017/03/10 PHP
使用PHP开发留言板功能
2019/11/19 PHP
层序遍历在ExtJs的TreePanel中的应用
2009/10/16 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
Bootstrap显示与隐藏简单实现代码
2017/03/06 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
2018/11/21 Javascript
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
2020/04/10 Javascript
[02:08]DOTA2英雄基础教程 马格纳斯
2014/01/17 DOTA
[49:21]2018DOTA2亚洲邀请赛3月30日 小组赛B组 Effect VS iG
2018/03/31 DOTA
[01:00:52]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第一场
2018/04/05 DOTA
python单线程实现多个定时器示例
2014/03/30 Python
python密码错误三次锁定(实例讲解)
2017/11/14 Python
python 将list转成字符串,中间用符号分隔的方法
2018/10/23 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
python计算无向图节点度的实例代码
2019/11/22 Python
使用python模拟高斯分布例子
2019/12/09 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
opencv 实现特定颜色线条提取与定位操作
2020/06/02 Python
Python实现列表中非负数保留,负数转化为指定的数值方式
2020/06/04 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
幼儿园小班教学反思
2014/02/02 职场文书
惊涛骇浪观后感
2015/06/05 职场文书
环境卫生整治简报
2015/07/20 职场文书
创业计划书之餐饮
2019/09/02 职场文书
Python并发编程实例教程之线程的玩法
2021/06/20 Python
Golang连接并操作MySQL
2022/04/14 MySQL