基础的十进制按位运算总结与在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爬虫入门教程之糗百图片爬虫代码分享
Sep 02 Python
Python3使用requests登录人人影视网站的方法
May 11 Python
详解Python中类的定义与使用
Apr 11 Python
Python利用Django如何写restful api接口详解
Jun 08 Python
python面向对象入门教程之从代码复用开始(一)
Dec 11 Python
在Pycharm中设置默认自动换行的方法
Jan 16 Python
Pandas分组与排序的实现
Jul 23 Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 Python
浅谈Keras中shuffle和validation_split的顺序
Jun 19 Python
django restframework serializer 增加自定义字段操作
Jul 15 Python
Jupyter Notebook安装及使用方法解析
Nov 12 Python
Python的Tqdm模块实现进度条配置
Feb 24 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
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
php数组中删除元素的实现代码
2012/06/22 PHP
对于PHP 5.4 你必须要知道的
2013/08/07 PHP
php 三元运算符实例详细介绍
2016/12/15 PHP
PHP执行shell脚本运行程序不产生core文件的方法
2016/12/28 PHP
PHP实现链表的定义与反转功能示例
2018/06/09 PHP
js一组验证函数
2008/12/20 Javascript
Mootools 1.2教程 滚动条(Slider)
2009/09/15 Javascript
JavaScript flash复制库类 Zero Clipboard
2011/01/17 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
JQuery中DOM事件合成用法实例分析
2015/06/13 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
基于JavaScript实现Tab选项卡切换效果
2016/11/24 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
JS设计模式之状态模式概念与用法分析
2018/02/05 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
2019/05/14 Javascript
JS实现简易留言板增删功能
2020/02/08 Javascript
js实现九宫格抽奖
2020/03/19 Javascript
Java 生成随机字符的示例代码
2021/01/13 Javascript
[48:22]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
深入理解Python 代码优化详解
2014/10/27 Python
LRUCache的实现原理及利用python实现的方法
2017/11/21 Python
python实现朴素贝叶斯算法
2018/11/19 Python
对Python获取屏幕截图的4种方法详解
2019/08/27 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
Pycharm如何导入python文件及解决报错问题
2020/05/10 Python
详解Pandas 处理缺失值指令大全
2020/07/30 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
物业保安主管岗位职责
2013/12/25 职场文书
薪酬专员岗位职责
2014/02/18 职场文书
董事长助理岗位职责
2014/02/18 职场文书
学员自我鉴定
2014/03/19 职场文书
幼儿园六一儿童节主持节目串词
2014/03/21 职场文书
群众路线教育实践活动整改落实情况汇报
2014/10/28 职场文书