基础的十进制按位运算总结与在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字典基本操作实例分析
Jul 11 Python
使用Python生成随机密码的示例分享
Feb 18 Python
Python画图学习入门教程
Jul 01 Python
Python3.6简单操作Mysql数据库
Sep 12 Python
在cmder下安装ipython以及环境的搭建
Oct 19 Python
python打造爬虫代理池过程解析
Aug 15 Python
基于Python fminunc 的替代方法
Feb 29 Python
Ubuntu中配置TensorFlow使用环境的方法
Apr 21 Python
pandas中read_csv、rolling、expanding用法详解
Apr 21 Python
解决python运行启动报错问题
Jun 01 Python
Python中的特殊方法以及应用详解
Sep 20 Python
java关于string最常出现的面试题整理
Jan 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
浅谈json_encode用法
2015/03/05 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
php通过排列组合实现1到9数字相加都等于20的方法
2015/08/03 PHP
详解Yii2 之 生成 URL 的方法
2017/06/16 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
又一个图片自动缩小的JS代码
2007/03/10 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
js判断背景图片是否加载成功使用img的width实现
2013/05/29 Javascript
JS获取select-option-text_value的方法
2013/12/26 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
2015/08/03 Javascript
跟我学习javascript的隐式强制转换
2015/11/16 Javascript
整理Javascript基础语法学习笔记
2015/11/29 Javascript
Node.js DES加密的简单实现
2016/07/07 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
vue按需加载组件webpack require.ensure的方法
2017/12/13 Javascript
nodejs使用redis作为缓存介质实现的封装缓存类示例
2018/02/07 NodeJs
微信小程序自定义音乐进度条的实例代码
2018/08/28 Javascript
angular8和ngrx8结合使用的步骤介绍
2019/12/01 Javascript
JavaScript 事件代理需要注意的地方
2020/09/08 Javascript
Python定时执行之Timer用法示例
2015/05/27 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
Python实现新型冠状病毒传播模型及预测代码实例
2020/02/05 Python
如何基于线程池提升request模块效率
2020/04/18 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
Python几种常见算法汇总
2020/06/02 Python
TripAdvisor越南:全球领先的旅游网站
2017/09/21 全球购物
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
资产评估专业学生的自我鉴定
2013/11/14 职场文书
专题民主生活会对照检查材料思想汇报
2014/09/29 职场文书
投诉书范文
2015/07/02 职场文书
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python
Python中的协程(Coroutine)操作模块(greenlet、gevent)
2022/05/30 Python