基础的十进制按位运算总结与在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简单实现计算过期时间的方法
Jun 09 Python
利用Tkinter(python3.6)实现一个简单计算器
Dec 21 Python
CentOS7.3编译安装Python3.6.2的方法
Jan 22 Python
Python实现线程状态监测简单示例
Mar 28 Python
使用matplotlib绘制图例标签中带有公式的图
Dec 13 Python
python ftplib模块使用代码实例
Dec 31 Python
Django实现将views.py中的数据传递到前端html页面,并展示
Mar 16 Python
pyqt5 QlistView列表显示的实现示例
Mar 24 Python
python爬虫学习笔记之pyquery模块基本用法详解
Apr 09 Python
Django中文件上传和文件访问微项目的方法
Apr 27 Python
Python模拟伯努利试验和二项分布代码实例
May 27 Python
Python虚拟环境virtualenv是如何使用的
Jun 20 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扩展编写点滴 技巧收集
2010/03/09 PHP
php下载文件源代码(强制任意文件格式下载)
2014/05/09 PHP
php中隐形字符65279(utf-8的BOM头)问题
2014/08/16 PHP
PHP使用redis实现统计缓存mysql压力的方法
2015/11/14 PHP
使用XHProf查找PHP性能瓶颈的实例
2017/12/13 PHP
零基础学JavaScript最新动画教程+iso光盘下载
2008/01/22 Javascript
js 屏蔽鼠标右键脚本附破解方法
2009/12/03 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
js子页面获取父页面数据示例
2014/05/15 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
2016/06/22 Javascript
通过原生JS实现为元素添加事件的方法
2016/11/23 Javascript
基于Vue如何封装分页组件
2016/12/16 Javascript
React Native 使用Fetch发送网络请求的示例代码
2017/12/02 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
2018/02/22 Javascript
ng-repeat指令在迭代对象时的去重方法
2018/10/02 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
vue-cli3 引入 font-awesome的操作
2020/08/11 Javascript
[01:14]DOTA2 7.22版本新增神杖效果展示(智力英雄篇)
2019/05/29 DOTA
从零学Python之入门(三)序列
2014/05/25 Python
Python中使用select模块实现非阻塞的IO
2015/02/03 Python
使用httplib模块来制作Python下HTTP客户端的方法
2015/06/19 Python
Python设计模式之MVC模式简单示例
2018/01/10 Python
python如何制作缩略图
2019/04/30 Python
python logging模块书写日志以及日志分割详解
2019/07/22 Python
解决pycharm最左侧Tool Buttons显示不全的问题
2019/12/17 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
Python基于wordcloud及jieba实现中国地图词云图
2020/06/09 Python
Python判断远程服务器上Excel文件是否被人打开的方法
2020/07/13 Python
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
天地会口号
2014/06/17 职场文书
超市仓管员岗位职责范本
2014/09/18 职场文书
技术股份合作协议书
2014/10/05 职场文书
大学生党员自我评价
2015/03/04 职场文书
台风停课通知
2015/04/24 职场文书
会议开幕致辞怎么写
2016/03/03 职场文书
新手初学Java List 接口
2021/07/07 Java/Android