day5-位运算(了解即可)

# 计算机直接能存储的数据只有数字;数字以二进制补码的形式存储。

# 1.进制
# 十进制:数字从0到9: 89,23 ,923 ,89
# 二进制:数字只有0和1: 110101
# 八进制:数字从0~7: 40621
# 十六进制:数字从0~9、a~f/A~F表示,a:10,b:11,c:12...,f:15
# 一般的数字都是十进制,在数字前加前缀“0b”就是二进制,“0o”是八进制,“0x”是十六进制

# bin() - 转二进制
print(bin(89))
print(bin(0o45))
# oct() - 转八进制、hex() - 转十六进制

# 2.原码、反码和补码
# 1)原码:最高位表示符号位(0表示正,1表示负),后面是数的真值(数字绝对值的二进制)
#   10(原码):0 0001010
#   -10(原码):1 0001010
# 2)正数的原码、反码和补码是一样的,没有区别
# 反码:原码的符号位不变,其余各位取反
#   10(反码):0 0001010
#   -10(反码):1 1110101
# 3)补码
# 反码加1
"""
(0+0==0,0+1==1,1+0==1,1+1==0,进一位)
"""
# #  110 + 111 == 1101;101 + 100110 ==101011
#  10(补码):0 0001010
#  -10(补码):1 1110110

# 3.位运算:&(按位与)、|(按位或)、^(异或)、~(取反)、<<(左移)、>>(右移)
#  与运算&(用来制0):对每一位进行运算存储:1 & 1 == 1、1 & 0 == 0、0 & 0 == 0
#   111 & 101  -> 101

# 应用1:快速判断整数的奇偶性 - 所有偶数在存储的时候的最低位为0,奇数存储时的最低位为1;
# 整数 & 1 :提取出数字在存储时候最低的值
num = 89
if num & 1:
    print('奇数')
else:
    print('偶数')

# 应用2:快速进行乘2的操作
# 整数 << N -> 整数快速乘以2的N次方
# 00000011 -> 3
# 00000110 -> 6
print(3 << 1)   # 6
print(5 << 1)   # 10

# 应用3:快速整除2的操作
# 整数 >> N -> 整数快速整除2的N次方
print(6 >> 1)   # 3
print(5 >> 1)   # 2
print(13 >> 2)  # 3

你可能感兴趣的:(day5-位运算(了解即可))