一、进制
在计算机编程中,整数可以通过十进制、二进制、八进制、十六进制来表示
a.十进制
基数:0,1,2,3,4,5,6,7,8,9
进位:逢十进一
位权:10的n次方,每位数的代表的含义
b.二进制
基数:0,1
进位:逢二进一
位权:2的n次方,每位数代表的含义
c.八进制
基数:0,1,2,3,4,5,6,7
进位:逢八进一
位权:123(8) = 3+16+64 = 83
8的n次方,每位数代表的含义
d.十六进制
基数:09,af(大小写均可),从小到大分别对应10,11,12,13,14,15
位权:逢十六进一
位权:16的n次方,每位数表示的含义
1. 程序中怎么表示不同进制的数
在程序中直接写的数字都是10进制
num = 10 # 这是一个10进制数
print(num) # 直接打印其他进制数就会显示他的十进制
a.二进制
写法:0b/0B + 二进制数
num = 0b1110 # 每位上必须是二进制数
print(num)
print(bin(800)) # 获取一个数对应的二进制表示方式
# num2 = 0b23 # SyntaxError: invalid token
b.八进制
写法:0o/0O + 八进制数
num = 0o134 # 每位上必须是八进制数
print(num)
print(oct(800))
# num = 0o78 # SyntaxError: invalid syntax
c.十六进制
写法:0x/0X+十六进制数
num = 0xaf2 # 每位上必须是十六进制数
print(num)
print(hex(19968))
print(hex(255))
# num = 0xd23h # SyntaxError: invalid syntax
注意:
输入:一个数字(可以是任何进制数)
输出:字符串
二、位运算
计算机储存数据只能储存数字数据,而且是数字的补码,运算的是使用补码来进行运算
1.原码
符号位+真值
说明:
符号位:最高位是0,表示一个正数,1表示负数
真值:去掉正负符号,数字对应的二级制值
2.反码
正数:就是原码(本身)
负数:符号位不变,其余的位数取反(0变1,1变0)
即对负数才有此要求
3.补码
正数:还是原码(本身)
负数:在反码的基础上+1
反码的存在是为了求补码
4.为什么计算机要存补码?
原因:计算机里只有加法器,没有减法器
5.位运算有哪些?
&(按位与),|(按位或),^(按位异或),~(按位取反),<<(左移),>>(右移)
a.&(按位与)
数字1 & 数字2
说明:每位上有0就是0,没0就是1
特点:
一个数与1与,保留这个数
一个数与0与,置0
应用:判断一个数的奇偶性(如果一个数的二进制的最低位是1就是奇数,否则就是偶数)
num & 1 == 0 -->num是偶数
num & 1 == 1 -->num是奇数
print(2 & 1, 200 & 1, -100 & 1) # 0 0 0
print(3 & 1, 5 & 1, 101 & 1) # 1 1 1
print(3 & 2) # 0011 & 0010 = 0010(补)
b.|(按位或)
数字1 | 数字2
说明:每位上有1就是1,没1就是0
特点:与1或,就置1
print(3 | 2) # 3
print(-3 | 2) # -1
c.~(按位取反)
单目运算符
~数字:将数字上的每一位取反
~ 1 = 0
~ 0 = 1
应用:加密运算
特点:取反两次就是它本身
print(~3) # -4
print(~-4) # ~~3 = 3 取反两次就是它本身
d.^(按位异或)
数字1 ^ 数字2
说明:相同为0,不同为1
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0
应用:1.加密
2.两个数是否相等:
相等:异或为0
不等:异或为1
print(3 ^ 2) # 2是密码,3是明文
print(1 ^ 2) # 1是密文,2是密码,得到明文
e.<< (左移)
数字1 << n
说明:数字1左移n位,相当于数字1 * 2**n
f. >> (右移)
数字1 >> n
说明:数字1右移n位,相当于数字1 // 2**n
应用:快速的进行除2的次方或者乘2的次方(底层运算,执行效率高)
print(4 << 1) # 8 == 4 * 2**1
print(-3 << 2) # -12 == -3*2**2
print(5 >> 1) # 2 == 5//2**1
print(5 >> 2) # 1 == 5//2**2
网友评论