基础的十进制按位运算总结与在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的Tornado框架实现图片上传及图片大小修改功能
Jun 30 Python
python 二分查找和快速排序实例详解
Oct 13 Python
python如何在循环引用中管理内存
Mar 20 Python
redis之django-redis的简单缓存使用
Jun 07 Python
Python 查找list中的某个元素的所有的下标方法
Jun 27 Python
Python使用post及get方式提交数据的实例
Jan 24 Python
Python PyInstaller库基本使用方法分析
Dec 12 Python
Python基于read(size)方法读取超大文件
Mar 12 Python
Python 实现敏感目录扫描的示例代码
May 21 Python
python怎么提高计算速度
Jun 11 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
Sep 04 Python
pandas针对excel处理的实现
Jan 15 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
SONY SRF-M100的电路分析
2021/03/02 无线电
PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
2014/09/24 PHP
php抛出异常与捕捉特定类型的异常详解
2016/10/26 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
php实现图片压缩处理
2020/09/09 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
extjs 学习笔记(三) 最基本的grid
2009/10/15 Javascript
JavaScript中关于indexOf的使用方法与问题小结
2010/08/05 Javascript
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
JS逆序遍历实现代码
2014/12/02 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
2015/05/08 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
使用clipboard.js实现复制功能的示例代码
2017/10/16 Javascript
Vue路由history模式解决404问题的几种方法
2018/09/29 Javascript
jQuery插件simplePagination的使用方法示例
2020/04/28 jQuery
关于Vue中$refs的探索浅析
2020/11/05 Javascript
pyv8学习python和javascript变量进行交互
2013/12/04 Python
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
python实现决策树
2017/12/21 Python
python 获取微信好友列表的方法(微信web)
2019/02/21 Python
python实现日志按天分割
2019/07/22 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
Python3如何判断三角形的类型
2020/04/12 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
Python pathlib模块使用方法及实例解析
2020/10/05 Python
python函数超时自动退出的实操方法
2020/12/28 Python
python 基于UDP协议套接字通信的实现
2021/01/22 Python
俄罗斯达美乐比萨外送服务:Domino’s Pizza
2020/12/18 全球购物
几个常见的消息中间件(MOM)
2014/01/08 面试题
工商管理本科毕业生求职信范文
2013/10/05 职场文书
2014年保卫工作总结
2014/12/05 职场文书
致三级跳运动员加油稿
2015/07/21 职场文书
九大龙王魂骨,山龙王留下躯干骨,榜首死的最憋屈(被捏碎)
2022/03/18 国漫
spring 项目实现限流方法示例
2022/07/15 Java/Android