# &: 都是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的位运算的更多相关文章

  1. Python这些位运算的妙用,绝对让你大开眼界

    位运算的性能大家想必是清楚的,效率绝对高.相信爱好源码的同学,在学习阅读源码的过程中会发现不少源码使用了位运算.但是为啥在实际编程过程中应用少呢?想必最大的原因,是较为难懂.不过,在面试的过程中,在手 ...

  2. python 对位运算

  3. 剑指offer用位运算实现两个数相加,及python相关的位操作

    题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 代码: # -*- coding:utf-8 -*-class Solution:    def Add(self ...

  4. 利用位运算进行a+b的计算(Java&&Python)

    题目链接 需要用到的位运算操作:异或(^).与(&).右移(<<) 异或运算:又称不进位加法,a^b得到的结果为a与b相加,但是需要进位的地方不进位得到的结果 与运算:找出来a和b ...

  5. python位运算

    什么是位运算 位运算就是把数字当成二进制来进行计算,位运算有六种:&(与), |(或), ^(异或), ~(非), <<(左移), >>(右移) &(与) &a ...

  6. Python语言中的按位运算

    (转)位操作是程序设计中对位模式或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运算的运算速度通常与加 ...

  7. Python 进制转换、位运算

    一.进制转换 编程用十进制,十进制转换为二进制.八进制.十六进制 In [135]: bin(23) Out[135]: '0b10111' In [136]: oct(23) Out[136]: ' ...

  8. jave 逻辑运算 vs 位运算 + Python 逻辑运算 vs 位运算

    JAVA中&&和&.||和|(短路与和逻辑与.短路或和逻辑或)的区别 博客分类: 面试题目 Java.netBlog  转自 :http://blog.csdn.net/web ...

  9. Python笔记_第一篇_面向过程_第一部分_3.进制、位运算、编码

    通过对内存这一个部分的讲解,对编程会有一个相对深入的认识.数据结构是整个内存的一个重要内容,那么关于数据结构这方面的问题还需要对进制.位运算.编码这三个方面再进行阐述一下.前面说将的数据结构是从逻辑上 ...

随机推荐

  1. python基础之函数参数、嵌套、返回值、对象、命名空间和作用域

    函数的使用原则 函数的使用必须遵循:先定义后使用的原则 函数的定义,与变量的定义是相似的,如果没有事先定义函数而直接引用就相当于在引用一个不存在变量名 定义阶段:只检测语法,不执行代码,当出现语法错误 ...

  2. python语法re.compile模块介绍

    1. re模块是正则表达式模块,re模块中包含一个重要函数是compile(pattern [, flags]) ,该函数根据包含的正则表达式的字符串创建模式对象.可以实现更有效率的匹配. impor ...

  3. 安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)

    本文导航 -1. 注册并启用红帽订阅 -2. 使用静态 IP 地址配置网络 -3. 设置服务器的主机名称 -4. 更新或升级最小化安装的 CentOS -5. 安装命令行 Web 浏览器 -6. 安装 ...

  4. Android学习记录(7)—Intent中显示意图和隐式意图的用法

    Intent(意图)主要是解决Android应用的各项组件之间的通讯. Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的 ...

  5. 《Cracking the Coding Interview》——第16章:线程与锁——题目3

    2014-04-27 19:26 题目:哲学家吃饭问题,死锁问题经典模型(专门用来黑哲学家的?). 解法:死锁四条件:1. 资源互斥.2. 请求保持.3. 非抢占.4. 循环等待.所以,某砖家拿起一只 ...

  6. Dapper 学习笔记

    一.基础 1.Dapper代码就一个SqlMapper.cs文件, 前人测试Dapper速度较快 的Orm,读取速度接近IDataReader,超过DataTable. 2.a.下载地址 https: ...

  7. Java SE 5.0 - SE 8 的功能增强

    Table of Contents 前言 Java 5.0 Generics Enhanced for Loop Autoboxing Typesafe Enums Varargs Static Im ...

  8. 01--是时候让我们谈谈一致性hash了

    --------------------- 假如你有图中三个盒子,我们有代号为 1,4,5,12 这四样东西 那根据代号作为主键,将东西放到盒子了,该如何放置? 我们可以对代号取模 1 mod 3 = ...

  9. spring boot打war包启动Tomcat失败

    Tomcat启动失败:最后一个causy by :java.lang.NoSuchMethodError: org.apache.tomcat.util.res.StringManager.getMa ...

  10. 转载css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局

    转载  原文:http://www.divcss5.com/wenji/w732.shtml 原本不是圆形图片,通过CSS样式布局实现成圆形图片,首先图片必须为正方形. 二.使用布局技术   -    ...