基础的十进制按位运算总结与在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之wxPython应用实例
Sep 28 Python
Python随机生成信用卡卡号的实现方法
May 14 Python
Python中Continue语句的用法的举例详解
May 14 Python
Python2.7简单连接与操作MySQL的方法
Apr 27 Python
Python 查看文件的读写权限方法
Jan 23 Python
python实现简单淘宝秒杀功能
May 03 Python
Python操作Oracle数据库的简单方法和封装类实例
May 07 Python
python pandas修改列属性的方法详解
Jun 09 Python
通过python实现弹窗广告拦截过程详解
Jul 10 Python
python检查目录文件权限并修改目录文件权限的操作
Mar 11 Python
Python socket服务常用操作代码实例
Jun 22 Python
如何利用Python写个坦克大战
Nov 18 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实现批量上传数据到数据库(.csv格式)的案例
2017/06/18 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
javascript 单选框,多选框美化代码
2008/08/01 Javascript
JQuery动画animate的stop方法使用详解
2014/05/09 Javascript
JS实现模拟风力的雪花飘落效果
2015/05/13 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
2016/01/27 Javascript
javascript每日必学之多态
2016/02/23 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
微信小程序之发送短信倒计时功能
2017/08/30 Javascript
Three.js基础学习之场景对象
2017/09/27 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
解决Layui数据表格中checkbox位置不居中的方法
2018/08/15 Javascript
vue发送ajax请求详解
2018/10/09 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
2018/11/10 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
JavaScript 实现同时选取多个时间段的方法
2019/10/17 Javascript
Vue中jsx不完全应用指南小结
2019/11/01 Javascript
JavaScript中如何对多维数组(矩阵)去重的实现
2019/12/04 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
2020/02/12 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
python实现的一个p2p文件传输实例
2014/06/04 Python
分享6个隐藏的python功能
2017/12/07 Python
将TensorFlow的模型网络导出为单个文件的方法
2018/04/23 Python
详解Python locals()的陷阱
2019/03/26 Python
python实现手势识别的示例(入门)
2020/04/15 Python
ONLY德国官方在线商店:购买时尚女装
2017/09/21 全球购物
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
渡河少年教学反思
2014/02/12 职场文书
驾驶员安全责任书
2014/07/22 职场文书
2014年自愿离婚协议书
2014/10/10 职场文书
学校会议通知范文
2015/04/15 职场文书
2016年十一促销广告语
2016/01/28 职场文书
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
2022/04/06 Python