python-位运算

1.二进制

1.1什么是二进制

二进制是由0和1组成,逢2进1。
而十进制是逢10进1
例如:1, 10, 101, 1010111这些都是二进制数。
十进制由0-9组成。
例如:0, 9, 5, 12, 58这些都是十进制数。
计算机只认识二进制,所有的运算都是通过二进制。我们现在用的一些编程语言在最后都会编译成二进制。二进制才是计算机的本质。

二进制十进制
11
102
113
1004
1015
1106
1117
10008
10019

1.2有符号与无符号

按照一个字节等于8位来计算1byte=8bit
无符号
是什么就是是什么

有符号
最高位是符号位:1(负数) 0(正数)

十进制二进制
-11000 0001
10000 0001
-101000 0001

1.3原码反码补码

而在二进制中,由三种形式分别为:原码,反码,补码

原码:
最高位符号位

反码:
正数:反码和原码相同
负数:符号位一定是1,其余位对原码取反。

补码:

正数:补码和原码相同
负数:符号位一定是1,反码+1

1.3有符号与无符号

按照一个字节等于8位来计算1byte=8bit
无符号
是什么就是是什么
1000 0001就是1000 0001

有符号
最高位是符号位:1(负数) 0(正数)

十进制二进制
-11000 0001
10000 0001
-101000 0001

1.4位运算

计算机不知道加法是什么,减法是什么,只知道以下这些操作。

1.4.1与运算(and &)

两个都为1,结果变为1

1011 0001
1101 1000

结果:1001 0000

1.4.2或运算(or |)

只要一个为1,结果变为1

1011 0001
1101 1000

结果:1111 1001

1.4.3异或运算(xor ^)

不相同的,则变为1

1011 0001
1101 1000

结果:0110 1001

1.4.4非运算(单目运算符 not ~)

0变1,1变0

1101 1000

结果:0010 0111

1.4.5位运算(移动位)

左移(<<)

0000 0001  # 所有二进制数向左移位,高位丢弃,低位补0。

# 结果
0000 0010  # 例如向左一位

右移( >>)

0000 0001  # 所有二进制数向右移位,低位丢弃,高位补0或1(符号位决定)

#结果
0000 0000  # 例如向右一位

1.5二进制加法

十进制:1+2
计算机运算过程:

先进行异或运算

0000 0001
0000 0010

结果:0000 0011

再进行与运算,如果得出的结果是:0000 0000,则最总结果为上一步的异或结果

0000 0001
0000 0010

结果:0000 0000

所以最总结果为0000 0011,十进制表示为3,1+2 就等于3

2.python中使用

a = 3
b = 4
print("a二进制表示:",bin(a))
print("b二进制表示:",bin(b))
print("\n")

print("与运算")
print("a&b十进制结果:",a&b)
print("a&b二进制结果:",bin(a&b))
print("\n")

print("或运算")
print("a|b十进制结果:",a|b)
print("a|b二进制结果:",bin(a|b))
print("\n")

print("异或运算")
print("a^b十进制结果:",a^b)
print("a^b二进制结果:",bin(a^b))
print("\n")

print("非运算")
print("~a二进制结果:",bin(~a))
print("~a十进制结果:",~a)
print("~b二进制结果:",bin(~b))
print("~b十进制结果:",~b)
print("\n")

print("左移")
print("a<<1十进制结果:",a<<1)
print("a<<1二进制结果:",bin(a<<1))
print("b<<1十进制结果:",b<<1)
print("b<<1二进制结果:",bin(b<<1))
print("\n")

print("右移")
print("a>>1十进制结果:",a>>1)
print("a>>1二进制结果:",bin(a>>1))
print("b>>1十进制结果:",b>>1)
print("b>>1二进制结果:",bin(b>>1))

运算结果:

a二进制表示: 0b11
b二进制表示: 0b100


与运算
a&b十进制结果: 0
a&b二进制结果: 0b0


或运算
a|b十进制结果: 7
a|b二进制结果: 0b111


异或运算
a^b十进制结果: 7
a^b二进制结果: 0b111


非运算
~a二进制结果: -0b100
~a十进制结果: -4
~b二进制结果: -0b101
~b十进制结果: -5


左移
a<<1十进制结果: 6
a<<1二进制结果: 0b110
b<<1十进制结果: 8
b<<1二进制结果: 0b1000


右移
a>>1十进制结果: 1
a>>1二进制结果: 0b1
b>>1十进制结果: 2
b>>1二进制结果: 0b10
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值