python的位运算
# &: 都是1,才为1,否则为零 # |: 都是0,才为0,否则为1 # ^: 相同为0,相异为1 a = bin(20) b = bin(16) print(a) # 0b10100 print(b) # 0b10000 # 都为1,才为1 # 因此结果是0b10000 print(20 & 16) # 16 # 0b10100 print(20 | 16) # 20 # 0b00100 print(20 ^ 16) # 4 # >> n 表示右移n位,相当于除以2**n print(100 >> 2) # 25 print(100 / (2**2)) # 25.0 # << n 表示左移n位,相当于乘以2**n print(20 << 2) # 80 print(20 * (2**2)) # 80 # 如果一个字节中的后四位的值,比如01001101 # 那么只需让01001101对应的值和00001111的值(这里是15)做一个与运算,计算哪几位,哪几位就为1,其余的补0 # 我要是计算后7位呢,那么显然和01111111做一个与运算,显然这里是127 # 要是计算某一位的值,比方说第1位,那么计算的时候右移7位就行了。此时第1位处于最后一位。 # 关于左移和右移 # 11111111,右移,那么移出的部分不要,高位补0,00001111 # 11111111,左移,低位补0,高位保留,111111110000
补充:
# 假设用两个字节表示数字 # 1用二进制表示0000 0000 0000 0001 # -1用二进制表示1000 0000 0000 0001 # 那帮计算机科学家们秉承着能少用内存就少用的精神,让最高位表示符号位。0为正,1为负 # 1 = 0000 0000 0000 0001 # -1= 1000 0000 0000 0001 # 将两者相加 1 + -1 = 1000 0000 0000 0010,结果变成-2了。 # 这是为什么? # 因为在计算机中,数字相加,其实是将补码进行相加,什么叫补码 # 正数--->原码=反码=补码 # 负数--->反码=原码的符号位不变,其他位取反 # 补码=反码 + 1 # 再来计算一下 # 原码:1000 0000 0000 0001 # 反码:1111 1111 1111 1110 ,符号位不变,其他的位取反,0变1,1变0 # 补码:1111 1111 1111 1111 , 反码 + 1 # 正数的原码等于反码等于补码 # 因此将补码进行相加 1 + -1 = 0000 0000 0000 0000,逢二进一,前面多出去的一位不用管了,不在范围内 # 关于取反操作 print(~9) # -10 # 这里的结果为什么是-10,难道不应该是-9吗? # 首先 9 --> 0000 1001,原码反码补码都是它 # 如果取反,表示对补码取反,因为在运算的过程中,都是对补码进行运算 # 0000 1001 取反之后 1111 0110得到取反之后的补码 # 刚说过,运算的时候使用补码,但是在展示给程序猿来看的时候用的还是原码,所以还要将补码转换成原码 # 所以符号位不变其他位取反,得到了反码,1000 1001 # 最后别忘了+1,--> 1000 1010,结果是-10
python的位运算的更多相关文章
- Python这些位运算的妙用,绝对让你大开眼界
位运算的性能大家想必是清楚的,效率绝对高.相信爱好源码的同学,在学习阅读源码的过程中会发现不少源码使用了位运算.但是为啥在实际编程过程中应用少呢?想必最大的原因,是较为难懂.不过,在面试的过程中,在手 ...
- python 对位运算
- 剑指offer用位运算实现两个数相加,及python相关的位操作
题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 代码: # -*- coding:utf-8 -*-class Solution: def Add(self ...
- 利用位运算进行a+b的计算(Java&&Python)
题目链接 需要用到的位运算操作:异或(^).与(&).右移(<<) 异或运算:又称不进位加法,a^b得到的结果为a与b相加,但是需要进位的地方不进位得到的结果 与运算:找出来a和b ...
- python位运算
什么是位运算 位运算就是把数字当成二进制来进行计算,位运算有六种:&(与), |(或), ^(异或), ~(非), <<(左移), >>(右移) &(与) &a ...
- Python语言中的按位运算
(转)位操作是程序设计中对位模式或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运算的运算速度通常与加 ...
- Python 进制转换、位运算
一.进制转换 编程用十进制,十进制转换为二进制.八进制.十六进制 In [135]: bin(23) Out[135]: '0b10111' In [136]: oct(23) Out[136]: ' ...
- jave 逻辑运算 vs 位运算 + Python 逻辑运算 vs 位运算
JAVA中&&和&.||和|(短路与和逻辑与.短路或和逻辑或)的区别 博客分类: 面试题目 Java.netBlog 转自 :http://blog.csdn.net/web ...
- Python笔记_第一篇_面向过程_第一部分_3.进制、位运算、编码
通过对内存这一个部分的讲解,对编程会有一个相对深入的认识.数据结构是整个内存的一个重要内容,那么关于数据结构这方面的问题还需要对进制.位运算.编码这三个方面再进行阐述一下.前面说将的数据结构是从逻辑上 ...
随机推荐
- PHP.35-TP框架商城应用实例-后台11-商品分类-删除分类(2种方法)、添加、修改
删除分类 删除一个分类的同时,其所有子分类都删除 在控制器CategoryCtroller.class.php中添加删除函数(delete) 在分类模型中添加钩子函数_before_delete()[ ...
- STM8S PWM输出停止后 IO口电平输出
STM8S有许多定时器支持PWM输出,但在停止定时器后,IO口电平到底是多少呢?或高或低. 因此,为了确定PWM停止输出电平后其对应的值是多少,我们在停止PWM输出时需要对CCMR1寄存器进行设置. ...
- Spring---单例模式(Singleton)的6种实现
1.1.1 摘要 在我们日常的工作中经常需要在应用程序中保持一个唯一的实例,如:IO处理,数据库操作等,由于这些对象都要占用重要的系统资源,所以我们必须限制这些实例的创建或始终使用一个公用的实例,这就 ...
- HTML标准开头
<!doctype html> <html> <head> <meta charset="utf-8"> <title&g ...
- linux->centos7设置tomcat开机自启
找到/etc/rc.d/文件下的rc.local,添加如下内容 export JAVA_HOME=/usr/local/jdk1.8.0_144export JRE_HOME=$JAVA_HOME/j ...
- Python学习5,三级菜单实例
_author_ = "Happyboy" data = { '北京':{ "昌平":{ "沙河":["Happyboy" ...
- Abstract Factory 抽象工厂(创建型模式)
1.常规的对象创建方法(以更换QQ空间主题为例) (这里的常规对象指的是由于业务需求,当前实例化的对象有可能被其他相似的对象(有着共同的特性)所取代,例如更换手机铃声:一首歌取代另一首歌(词,曲,和声 ...
- Spring Boot多数据源配置(一)durid、mysql、jpa整合
目前在做一个统计项目.需要多数据源整合,其中包括mysql和mongo.本节先讲mysql.durid.jpa与spring-boot的整合. 引入Durid包 <dependency> ...
- django orm 之makemigrations和migrate命令
makemigrations:将模型的更改生成迁移脚本文件.模型所在的app,必须放在settings.py中的INSTALLED_APPS列表中.这个命令有以下几个常用选项: 1.app_label ...
- VS调试时不捕捉Exception
在方法上添加 [DebuggerHidden] 这样,发生错误的时候,VS就不会捕捉到这个错误,否则,会在错误的地方中断. [DebuggerHidden] public void DeleteAll ...