基础的十进制按位运算总结与在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通过colorama模块在控制台输出彩色文字的方法
Mar 19 Python
独特的python循环语句
Nov 20 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 Python
Python基于pandas实现json格式转换成dataframe的方法
Jun 22 Python
Django 限制用户访问频率的中间件的实现
Aug 23 Python
在python中实现将一张图片剪切成四份的方法
Dec 05 Python
用Python PIL实现几个简单的图片特效
Jan 18 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
Jul 23 Python
python 进程间数据共享multiProcess.Manger实现解析
Sep 23 Python
python Matplotlib数据可视化(1):简单入门
Sep 30 Python
如何用python批量调整视频声音
Dec 22 Python
用Python的绘图库(matplotlib)绘制小波能量谱
Apr 17 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获取文件内容最后一行示例
2014/01/09 PHP
php删除左端与右端空格的方法
2014/11/29 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
Laravel5.5以下版本中如何自定义日志行为详解
2018/08/01 PHP
零基础php编程好学吗
2019/10/11 PHP
List the Codec Files on a Computer
2007/06/11 Javascript
javascript new一个对象的实质
2010/01/07 Javascript
求数组最大最小值方法适用于任何数组
2013/08/16 Javascript
jQuery动画效果-fadeIn fadeOut淡入浅出示例代码
2013/08/28 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
2015/09/01 Javascript
Javascript中的几种继承方式对比分析
2016/03/22 Javascript
ReactNative短信验证码倒计时控件的实现代码
2017/07/20 Javascript
Vue自定义指令封装节流函数的方法示例
2018/07/09 Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
JS实现时间校验的代码
2020/05/25 Javascript
Python守护进程和脚本单例运行详解
2017/01/06 Python
Python wxpython模块响应鼠标拖动事件操作示例
2018/08/23 Python
pandas 转换成行列表进行读取与Nan处理的方法
2018/10/30 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
python下PyGame的下载与安装过程及遇到问题
2019/08/04 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
Python叠加矩形框图层2种方法及效果
2020/06/18 Python
CSS3动画效果回调处理详解
2014/12/10 HTML / CSS
澳大利亚领先的宠物用品商店:VetSupply
2017/09/08 全球购物
2014年六一儿童节演讲稿
2014/05/23 职场文书
教师群众路线心得体会
2014/11/04 职场文书
2014年化工厂工作总结
2014/11/25 职场文书
党员个人党性分析材料
2014/12/18 职场文书
司考复习计划
2015/01/19 职场文书
校友回访母校寄语
2015/02/26 职场文书
优秀团员个人总结
2015/02/26 职场文书
2015年求职自荐信范文
2015/03/04 职场文书
国博复兴之路观后感
2015/06/02 职场文书
百万英镑观后感
2015/06/09 职场文书
2015七夕情人节宣传语
2015/07/14 职场文书