基础的十进制按位运算总结与在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 执行字符串表达式函数(eval exec execfile)
Aug 11 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
Mar 19 Python
Python计时相关操作详解【time,datetime】
May 26 Python
Python 实现王者荣耀中的敏感词过滤示例
Jan 21 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
Jan 23 Python
python查询文件夹下excel的sheet名代码实例
Apr 02 Python
python面向对象实现名片管理系统文件版
Apr 26 Python
在python中实现调用可执行文件.exe的3种方法
Jul 07 Python
python3实现带多张图片、附件的邮件发送
Aug 10 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
Nov 29 Python
终于搞懂了Keras中multiloss的对应关系介绍
Jun 22 Python
python 爬取京东指定商品评论并进行情感分析
May 27 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做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
PHP函数addslashes和mysql_real_escape_string的区别
2014/04/22 PHP
php查询mssql出现乱码的解决方法
2014/12/29 PHP
Yii2结合Workerman的websocket示例详解
2018/09/10 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
Js 正则表达式知识汇总
2014/12/02 Javascript
Nodejs获取网络数据并生成Excel表格
2020/03/31 NodeJs
Bootstrap实现带暂停功能的轮播组件(推荐)
2016/11/25 Javascript
jQuery实现立体式数字滚动条增加效果
2016/12/21 Javascript
JS实现物体带缓冲的间歇运动效果示例
2016/12/22 Javascript
JS简单实现父子窗口传值功能示例【未使用iframe框架】
2017/09/20 Javascript
浅谈node.js 命令行工具(cli)
2018/05/10 Javascript
Vue中用props给data赋初始值遇到的问题解决
2018/11/27 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
2019/01/23 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
elementUI多选框反选的实现代码
2019/04/03 Javascript
初步探究Python程序的执行原理
2015/04/11 Python
python中xrange用法分析
2015/04/15 Python
Python字符串处理之count()方法的使用
2015/05/18 Python
Python实现抢购IPhone手机
2018/02/07 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
Python爬虫 批量爬取下载抖音视频代码实例
2019/08/16 Python
Python基于wordcloud及jieba实现中国地图词云图
2020/06/09 Python
浅谈Python3中print函数的换行
2020/08/05 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
Html5如何唤起百度地图App的方法
2019/01/27 HTML / CSS
html5 video标签屏蔽右键视频另存为的js代码
2013/11/12 HTML / CSS
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
求职简历中个人的自我评价
2013/12/25 职场文书
python turtle绘图命令及案例
2021/11/23 Python
Java异常处理try catch的基本用法
2021/12/06 Java/Android
Python如何加载模型并查看网络
2022/07/15 Python