基础的十进制按位运算总结与在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 相关文章推荐
Pycharm取消py脚本中SQL识别的方法
Nov 29 Python
对python判断是否回文数的实例详解
Feb 08 Python
Python面向对象之继承和多态用法分析
Jun 08 Python
Python3简单实现串口通信的方法
Jun 12 Python
使用Pycharm(Python工具)新建项目及创建Python文件的教程
Apr 26 Python
python多进程下的生产者和消费者模型
May 07 Python
django下创建多个app并设置urls方法
Aug 02 Python
全网最全python库selenium自动化使用详细教程
Jan 12 Python
教你怎么用Python实现GIF动图的提取及合成
Jun 15 Python
python代码实现扫码关注公众号登录的实战
Nov 01 Python
python blinker 信号库
May 04 Python
virtualenv隔离Python环境的问题解析
Jun 21 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 各种排序算法实现代码
2009/08/20 PHP
对textarea框的代码调试,而且功能上使用非常方便,酷
2006/06/30 Javascript
调用js时ie6和ie7,ff的区别
2009/08/19 Javascript
深入分析js中的constructor和prototype
2012/04/07 Javascript
推荐40款强大的 jQuery 导航插件和教程(上篇)
2012/09/14 Javascript
使用正则表达式的格式化与高亮显示json字符串
2014/12/03 Javascript
AngularJS基础知识笔记之表格
2015/05/10 Javascript
JQuery实现级联下拉框效果实例讲解
2015/09/17 Javascript
即将发布的jQuery 3 有哪些新特性
2016/04/14 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
2017/04/19 Javascript
JavaScript使用Ajax上传文件的示例代码
2017/08/10 Javascript
使用JS和canvas实现gif动图的停止和播放代码
2017/09/01 Javascript
pace.js和NProgress.js两个加载进度插件的一点小总结
2018/01/31 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
Vue 3.0 全家桶抢先体验
2020/04/28 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
如何将python中的List转化成dictionary
2016/08/15 Python
mysql 之通过配置文件链接数据库
2017/08/12 Python
用python处理MS Word的实例讲解
2018/05/08 Python
python字符串string的内置方法实例详解
2018/05/14 Python
Python 类的特殊成员解析
2018/06/20 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
python继承threading.Thread实现有返回值的子类实例
2020/05/02 Python
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
2021/03/14 PHP
HTML5 canvas基本绘图之绘制阴影效果
2016/06/27 HTML / CSS
高级护理实习生自荐信
2013/09/28 职场文书
工厂门卫岗位职责范本
2014/04/04 职场文书
服装设计专业毕业生求职信
2014/04/09 职场文书
给校长的建议书300字
2014/05/16 职场文书
公务员政审单位鉴定材料
2014/05/16 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
公安派出所所长四风问题个人对照检查材料
2014/10/04 职场文书
家长会主持词开场白
2015/05/29 职场文书
ORACLE中dbms_output.put_line输出问题的解决过程
2022/06/28 Oracle
Python实现数据的序列化操作详解
2022/07/07 Python