二进制:
- 通常我们说的整数是十进制,由0123456789组成
- 二进制的数则是由01组成
比如将整数123转换成二进制的
123除以2,等于61余1
61除以2,等于30余1
30除以2,等于15余0
15除以2,等于7余1
7除以2,等于3余1
3除以2,等于1余1
1除以2,余1
将上面获得余数从底向上填写,即:1111011,这个就是十进制123转成二进制的数
将1111011转成十进制,从右往左取数:
12^0=1
12^1=2
02^2=0
12^3=8
12^4=16
12^5=32
1*2^6=64
将上面的数字相加:1+2+0+8+16+32+64=123
# 十进制转二进制
print(bin(123))
# 二进制转十进制
print(int(0b1111011))
位运算:
1.按位与运算:&
- 参与运算的两个值,若是两个相对应的值是1,则返回1,否则是0
比如:
123转成二进制:1111011
20转成二进制:10100,为了方便与上面的进行运行,可以在前面补0,即:0010100
1111011
0010100
进行与运算后:0010000,即是16
# 十进制转二进制
print(bin(123),bin(20))
print(123 & 20)
2.按位或运算:|
- 参与运算的两个值,若是两个相对应的值只要有1,则返回1,否则是0
比如:
123转成二进制:1111011
20转成二进制:10100,为了方便与上面的进行运行,可以在前面补0,即:0010100
1111011
0010100
进行与运算后:1111111,即是127
# 十进制转二进制
print(bin(123),bin(20))
print(123 | 20)
3.按位异或运算:^
- 参与运算的两个值,若是两个相对应的值不同,则返回1,否则是0
1111011
0010100
进行与运算后:1101111,即是111
# 十进制转二进制
print(bin(123),bin(20))
print(123 ^ 20)
4.按位取反运算:~
- 对数据的每个二进制数据取反,~a=-(a+1)
例如~123
print(bin(123))
print(~123)
5.左移运算符:<<
- <<左边的运算数的各二进制全部左移若干未,<<右边的数字决定移动多少位数,高位丢弃,低位补0
6.右移运算符:>>
- 在>>左边的运算数的各二进制全部右移若干未,<<右边的数字决定移动多少位数,高位丢弃,低位补0
比如:
123 << 2,1111011向左移2位,在右边添加2个0:111101100
123 >> 2,1111011向右移2位,去掉右边的2个数:11110
print(bin(123))
print(bin(123 << 2))
print(bin(123 >> 2))