python之位运算(& | ~ ^左移 右移)

    技术2022-07-11  124

    python之位运算

    1 不同的进制在python中的表现形式

    二进制 0b1

    八进制 0o7

    十六进制 0x9

    2 二进制转换

    2.1怎么求负数的二进制表示

    典型案例,怎么求出-5的二进制表示?

    # 假如有个十进制的值 a = -5,怎么求出对应的二进制表示 bin(a) => -0b101 bin(-a) => 0b101 # 实际上应该怎么表示呢? 1、首先求出5的二进制位表示,一个byte由8个bit位组成 5 => 0000 0101 2、然后取5的反码,并在末位 + 1 0000 0101 1111 1010 => 1111 1011,这就是-5的二进制表示

    2.2 在python中怎么在二进制&十进制之间转换

    num = 32 # 十进制转二进制 bina = bin(num) print(bina) > 0b100000 # 二进制转十进制 intNum = int(0b100000) print(intNum) > 32

    3 八进制

    3.1 八进制转十进制

    num = 0o6347 int(0o6347) > 实际操作是 6*8^3 + 3*8^2 + 4*8^1 + 7*8^0

    3.2 八进制转二进制

    print(bin(0o6743)) # 0b110111100011 具体怎么实现的呢 6 7 4 3 => 110 111 100 011 # 1位换3位,最前面的0可以省略,但是1不能

    4 十六进制

    4.1 十六进制换二进制

    十六进制比较特殊,每位可以表示的从(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f),其中a = 10 f = 15

    print(bin(0x6743)) # 0b 110 0111 0100 0011 具体怎么实现的呢? 6 7 4 3 => 0110 0111 0100 0011 # 一位换4位,最前面的0可以省略,属于符号位

    4.2 十六进制转十进制

    num = 0x711 => 7*16^2 + 1*16^1 + 1*16^0

    5 位运算符号

    5.1 & 与

    print(3 & 2) # 2 &类似and 具体实现,1True0False 3 == 0000 0011 2 == 0000 0010 => 0000 0010 即十进制表示为:2

    5.2 |或

    print(3|2) # 3 |类似于or 具体实现,1True0False 3 == 0000 0011 2 == 0000 0010 => 0000 0011 即十进制表示为:3

    5.3 ~ 非

    print(~3) #-4 具体实现,1True0False 3 == 0000 0011 => 1111 1100 末位-1 => 1111 1011 => 取反码 => 0000 0100 即十进制:4 那么原来的肯定是-4

    5.4 ^ 异或

    print(3 ^ 2) # 1 具体实现=> 0000 0011 0000 0010 0000 0001 => 1

    5.5 << 左移

    print(2 << 1) # 4 具体实现 => 0000 0010 => 000 0010 => 000 0010 0() => 0000 0100 => 4

    5.6 >> 右移

    在python中没有无符号右移>>>

    print(8 >> 2) # 2 具体实现 => # 补最前的符号位时,应与左边头节点的数字保持一致 0000 1000 => 0000 10 => 补符号位 => 0 0000 10 => 补符号位 00 0000 10 => 0000 0010 => 2
    Processed: 0.009, SQL: 9