在计算机编程中,整数可以通过十进制、二进制、八进制、十六进制来表示
1.进制
- 十进制
基数:0,1,2,3,4,5,6,7,8,9
进位:逢10进1
位权:123 = 100 + 20 + 3 = 1*10**2 +2*10**1+3*10**0
- 二进制
基数:0,1
进位:逢2进1
100(2) == 4(10)
权位:101 = 1*2**0 + 0*2**1 + 1*2**0
- 八进制
基数:0,1,2,3,4,5,6,7
进位:逢8进1
位权:123(8) = 3*8**0 + 2*8**1 + 1*8**2 = 83
- 十六进制
基数:0-9,a/A - f/F -- a/A(10),b/B(11)..f/F(15)
1f ,ff,a00bf
进位:逢16进1
位权:123(16) = 3*16**0 + 2*16**1 + 1*16**2 = 291
1. 程序中怎么表示不同进制的数
在程序中直接写的数字都是10进制
num = 110 # 这是一个十进制数
二进制
0b + 二进制数
num = 0b110
print(bin(100))
print(bin(0x256df)) # 获取十六进制对应的二进制
# 八进制
# 0o + 八进制数、
num = 0o764
print()
十六进制
0x + 十六进制
num = 0x5fd
print(num)
print(hex(1997))
print(hex(175))
计算机存储数据只能存储数字数据,而且存的是数字的补码。
计算机对数据进行运算的时候是使用干部吗进行运算的,将数据从计算机中读出来看到的是原码
原码:
符号位 + 真值
说明:
符号位 - 最高位用0表示正数,1表示负数
真值 - 去掉正负,数字对应的二进制
100的原码:01100100
-100的原码:11100100
反码:
正数的反码:就是原码
负数的反码:原码的符号位不变,其他的位数取反
-100的反码:10011011
补码:
正数的补码:就是原码
负数的补码:反码+1
100补码:01100100
-100的补码:10011100
练习:-50
原码: 1110010
反码:1001101
补码:1001110
为什么计算机要存补码?
因为计算机只有加法器,没有减法器
3 - 2 --> 3 + (-2) = 1
2 - 3 --> 2 + (-3) = -1
3的原码:011
-2的原码:110
# 存原码:
3-2 = 011 + 110 =001 = 1
2 - 3 = 111+010 = 001 = 1
位运算:&(按位与)|(按位或)~(按位取反) ^(按位异或) >>(右移) <<(左移)
数字1 & 数字2 ---> 每一位上的数都为1结果就是1,有0就是0
0111(补) & 1101(补) -->0101(补)
print(3 & 2) # 0011 & 00150 --> 0010
应用:判断一个数的奇偶性(如果一个数的二进制的最低位是1就是奇数,否则就是偶数)
num % 2 == 0--> num是偶数
num & 1 == 0 --> num是偶数
num & 1 == 1 -- > num是奇数
数字1 | 数字2 :只要有1结果就是1,两个都为0结果才是0
特点:和1或,置1
print(3 | 2) # 0011 |0010 = 0011
~数字:将数字上的每一位取反
~1 = 0
数字1^数字2 : 相同为0,不同为1
1^1 = 0
1^0 = 1
0^1 = 1
0^0 = 0
应用:加密
数字1<>n:数字1右移n位 数字1//2**n
应用:快速乘2的次方/除2的次方