基础的十进制按位运算总结与在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 相关文章推荐
50行代码实现贪吃蛇(具体思路及代码)
Apr 27 Python
python字符串编码识别模块chardet简单应用
Jun 15 Python
python编写简单爬虫资料汇总
Mar 22 Python
python数据结构学习之实现线性表的顺序
Sep 28 Python
python查看模块安装位置的方法
Oct 16 Python
Python自定义一个类实现字典dict功能的方法
Jan 19 Python
python实现全盘扫描搜索功能的方法
Feb 14 Python
使用Python的SymPy库解决数学运算问题的方法
Mar 27 Python
pytorch-RNN进行回归曲线预测方式
Jan 14 Python
python redis存入字典序列化存储教程
Jul 16 Python
使用python-cv2实现视频的分解与合成的示例代码
Oct 26 Python
python代码实现图书管理系统
Nov 30 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 Zip解压 文件在线解压缩的函数代码
2010/05/26 PHP
让Json更懂中文(JSON_UNESCAPED_UNICODE)
2011/10/27 PHP
PHP中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题
2013/01/11 Javascript
JavaScript 判断浏览器是否支持SVG的代码
2013/03/21 Javascript
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
javascript中offset、client、scroll的属性总结
2015/08/13 Javascript
JavaScript识别网页关键字并进行描红的方法
2015/11/09 Javascript
Javascript之Date对象详解
2016/06/07 Javascript
AngularJS中的表单简单入门
2016/07/28 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
angular.JS实现网页禁用调试、复制和剪切
2017/03/31 Javascript
webpack配置文件和常用配置项介绍
2017/04/28 Javascript
JS实现多张图片预览同步上传功能
2017/06/23 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
[57:22]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第五场
2018/04/10 DOTA
Python装饰器decorator用法实例
2014/11/10 Python
python分析网页上所有超链接的方法
2015/05/08 Python
详解python 发送邮件实例代码
2016/12/22 Python
python3安装pip3(install pip3 for python 3.x)
2018/04/03 Python
python制作抖音代码舞
2019/04/07 Python
Python 获取windows桌面路径的5种方法小结
2019/07/15 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
如何将json数据转换为python数据
2020/09/04 Python
python cookie反爬处理的实现
2020/11/01 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
教育科学研究生自荐信
2013/10/09 职场文书
医学实习生自我鉴定
2013/12/12 职场文书
花坛标语大全
2014/06/30 职场文书
2015年公司工作总结
2015/04/25 职场文书
蜗居观后感
2015/06/11 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书
Python批量解压&压缩文件夹的示例代码
2022/04/04 Python