基础的十进制按位运算总结与在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中将单词首字母大写的capitalize()方法
May 18 Python
在Python中操作字符串之startswith()方法的使用
May 20 Python
python实现根据主机名字获得所有ip地址的方法
Jun 28 Python
Python使用django框架实现多人在线匿名聊天的小程序
Nov 29 Python
利用python爬取斗鱼app中照片方法实例
Dec 03 Python
Python实现快速傅里叶变换的方法(FFT)
Jul 21 Python
python删除字符串中指定字符的方法
Aug 13 Python
Python实现八皇后问题示例代码
Dec 09 Python
python3.5安装python3-tk详解
Apr 26 Python
python实现网站用户名密码自动登录功能
Aug 09 Python
pycharm配置git(图文教程)
Aug 16 Python
Django Form常用功能及代码示例
Oct 13 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 has encountered an Access Violation
2007/01/15 PHP
高性能PHP框架Symfony2经典入门教程
2014/07/08 PHP
php时间戳格式化显示友好的时间函数分享
2014/10/21 PHP
PHP中使用GD库创建圆形饼图的例子
2014/11/19 PHP
php防止sql注入简单分析
2015/03/18 PHP
一个完整的php文件上传类实例讲解
2015/10/27 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
关于Mozilla浏览器不支持innerText的解决办法
2011/01/01 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
深入理解vue2.0路由如何配置问题
2017/07/18 Javascript
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
JSON字符串操作移除空串更改key/value的介绍
2019/01/05 Javascript
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
使用webpack和rollup打包组件库的方法
2021/02/25 Javascript
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
获取Django项目的全部url方法详解
2017/10/26 Python
使用python实现ANN
2017/12/20 Python
python ddt实现数据驱动
2018/03/14 Python
python视频按帧截取图片工具
2019/07/23 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
HTML5 Canvas玩转酷炫大波浪进度图效果实例(附demo)
2016/12/14 HTML / CSS
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
职业生涯规划书的格式
2013/12/29 职场文书
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
个人借款协议书范本
2014/11/17 职场文书
万能检讨书
2015/01/27 职场文书
2015年中秋节主持词
2015/07/30 职场文书
MySQL数据库查询之多表查询总结
2022/08/05 MySQL