day-07 总结

进制

在计算机变成中,整数可以通过十进制,二进制,十六进制,八进制来表示

1.十进制
基数:0,1,2,3,4,5,6,7,8,9
进位:逢十进一
位权:123 = 100+20+3=1*10**2+2*10**1+3*10**0
2.二进制   bin(数字)
基数:0 , 1
进位:逢二进一
位权:0011001=1*2**0+0*2**1+0*2**2+1*2**3+1*2**4=25(十进制)
3.八进制   oct(数字)
基数:0,1,2,3,4,5,6,7
进位:逢八进一
位权:7654321=1*8**0+2*8**1+3*8**2+4*8**3+5*8**4+6*8**5+7*8**6=2054353(十进制)
4.十六进制  hex(数字)
基数:0,1,2,3,4,5,6,7,8,9,a(10),b(11),c(12),d(13),e(14),f(15)
进位:逢十六进一
位权:abc=12*16**0+b*16**1+a*16**2

程序中怎么表示不同进制的数

在程序中直接写的数字都是十进制
二进制; 0b11001010 =>202
八进制:0o1234567 =>2739128
十六进制:0x1234567890abcdef => 1311768467294899695

num=110
num1=0b11001010
num2=0o12345670
num3=0x1234567890abcdef
print(num,num1,num2,num3)
print(bin(800))
print(oct(800))
print(hex(800))

位运算

计算机存储的时候只能存储数据的补码,计算机在运算的时候是用
补码运算,将数据从计算机中读出来看结果展示的是原码

原码:符号位+真值
说明:
符号位:最高位是0表示正数,用1表示负数
真值:去掉正负,数字的二进制的值
100的原码:01100100
-100的源码:11100100

反码:
负数原码的符号位不变,其余的位数取反,
正数的反码就是本身
-100的反码:10011011
100的反码:01100100

补码:
正数的补码还是原码
负数的补码就是反码+1
100的补码:01100100
-100的补码:10011100

print(bin(-50))
原码:1110010
反码:1001101
补码:1001110

为什么要存补码
因为计算机中只有加法器,没有减法器

位运算: &(按位与运算) |按位或运算,~ 按位取反,^ 按位异或

>>右移,<<左移

按位与运算 - 一个数如果和1与会保留这个数,和0与会置0.
数字1 & 数字2 -- 每位上的书都为1,结果都为1,只要有0就是0
0111 & 1101 --> 0101(补码)
3 & 2  --》0011 & 0010 -->0010  
应用:判断一个数的奇偶性(如果一个数的最低位是1就是奇数,否则就是偶数)
num & 1 == 1 --> 奇数
num & 1 == 0 --> 偶数
| 按位或运算 :只要有1 结果就是1 ,两个都为0 结果才是0.
1 | 1--1
1 | 0--1
0 | 1--1
0 | 0--0
特点:任何数和1或都会置 1
print(3 | 2) #0011 | 0010 = 0011(补码)
print(-3 | -2) # 1101 | 1110 = 1111(补码)-》1110-》1001-》-1
~按位取反:
~数字 ----将数字每一位取反
~1 = 0
~0 = 1
print(~~3)
^按位异或
数字1 ^ 数字2 :相同为0 ,不同为1
1^1=0
0^0=0
1^0=1
0^1=1
应用:加密

print(3^2)  # 0011 ^ 0010 = 0001 --->1

左移和右移
数字1 << n:数字1左移 n 位,相当于数字12n
数字2 >> n:数字2 右移n位,相当于 数字1 // 2
*n

print(4<<1) # 4*2**1
print(-3<<2)# -3*2**2
print(5>>1) # 5//2**1
print(5>>2) # 5//2**2

你可能感兴趣的:(day-07 总结)