基础的十进制按位运算总结与在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 08 Python
分析python服务器拒绝服务攻击代码
Jan 16 Python
python+matplotlib实现礼盒柱状图实例代码
Jan 16 Python
详解python中asyncio模块
Mar 03 Python
Python pyinotify日志监控系统处理日志的方法
Mar 08 Python
Python实现判断一个整数是否为回文数算法示例
Mar 02 Python
Python tkinter实现图片标注功能(完整代码)
Dec 08 Python
python numpy生成等差数列、等比数列的实例
Feb 25 Python
Python将字典转换为XML的方法
Aug 01 Python
关于Python不换行输出和不换行输出end=““不显示的问题(亲测已解决)
Oct 27 Python
pandas统计重复值次数的方法实现
Feb 20 Python
Python基础之条件语句详解
Jun 16 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获取post中的json数据的实现方法
2011/06/08 PHP
UCenter 批量添加用户的php代码
2012/07/17 PHP
php代码审计比较有意思的例子
2014/05/07 PHP
php通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
Javascript Global对象
2009/08/13 Javascript
jquery.ui.progressbar 中文文档
2009/11/26 Javascript
javascript prototype原型操作笔记
2009/12/07 Javascript
关于JavaScript中var声明变量作用域的推断
2010/12/16 Javascript
Jquery attr(&quot;checked&quot;) 返回checked或undefined 获取选中失效
2013/10/10 Javascript
基于jquery插件实现常见的幻灯片效果
2013/11/01 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
js排序与重组的实例讲解
2017/08/28 Javascript
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
详解Ubuntu安装angular-cli遇到的坑
2018/09/08 Javascript
微信小程序授权登录及解密unionId出错的方法
2018/09/26 Javascript
详细介绍Python的鸭子类型
2016/09/12 Python
python3 爬取图片的实例代码
2018/11/06 Python
python读取有密码的zip压缩文件实例
2019/02/08 Python
Python使用paramiko操作linux的方法讲解
2019/02/25 Python
python与字符编码问题
2019/05/24 Python
python模块常用用法实例详解
2019/10/17 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
Html5之title吸顶功能
2018/06/04 HTML / CSS
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
Hashtable 添加内容的方式有哪几种,有什么区别?
2012/04/08 面试题
企业安全生产演讲稿
2014/05/09 职场文书
诚信贷款承诺书
2014/05/30 职场文书
咖啡店创业计划书范文
2014/09/15 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
电台广播稿范文
2015/08/19 职场文书
小学思品教学反思
2016/02/20 职场文书
彻底理解golang中什么是nil
2021/04/29 Golang
详解Python生成器和基于生成器的协程
2021/06/03 Python