• 第九节课:这些难缠的符号



    一、先得讲讲二进制

    9 + 1 = 10
    
    0 + 1 = 1
    1 + 1 = 10 
    10 + 1 = 11
    11 + 1 = 100
    100 + 1 = 101
    101 + 1 = 110

    二、难缠的符号

    bin(0) 0b1
    bin(2) 0b10
    bin(3) 0b11

    1. 难缠的符号之一 >>(二进制 - 右移) << (二进制 - 左移)

    3 >> 1
    1 
    8 >> 1 
    4

    左移运算

    1 << 1
    2 
    1 << 2 
    4
    1 << 3
    8

    左位移运算 a << N 结果是 a * (2**N)


    2. 难缠的符号之二 & (按位与)

    比较两个数字的二进制同一位,如果同一个位置的值都是1,则返回的值是1,否则为0


    例1

    >>> 10 & 20
    0
    >>> bin(10)
    '0b1010'
    >>> bin(20)
    '0b10100'

    1010
    10100

    比较时候,不足的位补0,如果同一个位置都是1,那么结果是1,否则就是0
    01010
    10100

    00000


    例二

    >>> 40 & 32
    32
    >>> bin(40)
    '0b101000'
    >>> bin(32)
    '0b100000'

    101000

    100000

    100000 所以结果为 32
    int(0b100000)


    3. 难缠的符号之三 | (按位或)

    比较两个数字的二进制同一位,同一个位置只要有一个是1,则返回的值是1,否则为0

    >>> 32 | 100
    100
    >>> bin(32)
    '0b100000'
    >>> bin(100)
    '0b1100100'

    0100000

    1100100

    1100100

    4. 难缠的符号之四 ^ (按位异或)
    参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0
    运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;

    5. 难缠的符号之五 ~
    参加运算的一个数据,按二进制位进行“取反”运算。
    运算规则:~1=0; ~0=1;


    三、其他
    1. &基偶的判定
    a & 1 结果为0 则是偶数 否则为奇数(原理:奇数的最后一位一定是1) 这个算法的速度更快.

    2. 计算机容量
    一个文件 11866字节 转换成M 11866 << 10

    3. 真真假假不知晓

    >>> True & False
    False
    >>> True & True
    True
    >>> False & False
    False
    >>> True & True & True
    True
    >>> True & True & False
    False
    >>> False & True & False
    False

    四、回头看看这道题

    aa = [(x*(x/2)>>0, x*(x%2)) for x in xrange(4)]
    print [((x>>1)<<1, (x&1)<<1) for x in xrange(4)]
  • 相关阅读:
    Chromium之文件类型
    To Chromium之浏览器外框UI(2)
    union的代码有点难理解额
    Graphic的一些基本概念
    windbg*****************************TBD
    x86/x64的stack*****************************TBD
    关于tp框架终于有点点头目了、、、、
    学习使用thinkphp框架制作cms
    我只是一名小小的员工
    每天读5分钟,受益匪浅、
  • 原文地址:https://www.cnblogs.com/huiming/p/5538484.html
Copyright © 2020-2023  润新知