01-进制
计算机在存储数字的时候都是以二进制的形式去存的
十进制、十六进制、八进制、二进制
1.十进制
基数:1,2,3,4,5,6,7,8,9,0
进位:逢十进一
每一位的值:123
111 = 110^0 + 110^1 + 1*10^2
2.二进制
所有二进制数都是有0和1组成的:011001
基数:1 -0
进位:逢2进1
每一位的值: 11011=12^0 + 12^1 + 02^2 + 12^3 + 12^4 =27
111 = 12^0 + 12^1 + 12^2=7
3.八进制
基数:0,1,2,3,4,5,6,7
进位:逢8进1
111=18^0 + 18^1 + 1*8^2=73
4.十六进制
基数:09,af(A~F)
进位逢十六进1
每一位的值:111=116^0 + 116^1 + 1*16^2=273
5.进制之间的转换.
a.其他进制转换成10进制:每一位上的数乘以进制幂次数的和
b.十进制转其他进制:辗转取余法
c.二进制转8进制:每三位二进制转换成1位的8进制
d.二进制转16进制:每四位二进制转换成1位对进制的支持
6.Python对进制的支持
Python支持通过二进制、八进制、十进制和十六进制的形式来直接表示整数
a.十进制:直接写的数字的值都是十进制的数
100
b.二进制:需要加前缀 ->0b
print(0b10) #2
c.八进制:需要加前缀->0o/0O
0o67
d.十六进制:需要加前缀->0x/0X
0x78ac
e.函数代码的进制的转换
bin(整数) -->将括号中的整数,转换成二进制形式的数
print(bin(10),bin(0o56))
oct(整数) -->将括号中的整数,转换成八进制形式的数
print(oct(0b110110),oct(10))
hex(整数) -->将括号中的整数,转换成16进制形式
print(hex(10),hex(0b110110))
02原码反码和补码
计算机在存数字的时候,存的是数字的二进制的补码
计算机计算的时候也是补码,最后结果看到的是原码
计算机 内存的最小单位是位:1位只能存储两个状态
8位 = 1字节
a.原码:整数数字的二进制形式
最高位是符号位,如果是正数符号位位0,负数符号位为1
10的原码 00000000 00001010
-10的原码 10000000 00001010
print(-0b0000000000001010)
b.反码
正数的反码就是它的原码
负数的反码就是这个数的原码的符号位不变,然后其他位置上的数取反(0->1,1->0)
-10 ->(原码)1000000 00001010 ->反码11111111 11110101
c.补码
正数的补码就是它的原码
负数的补码是它的反码加1
-10 ->1111111 11110101 ->(补码) 1111111 11110110
总结:正数的反码和补码都是原码,负数的补码是反码加1,反码是原码的符号位不变其他位取反。
为什么计算机存储的时候存补码?:因为计算机中只有加法器,只能进行加操作.存原码对负数进行加操作的时候有问题
04位运算
位运算符:
& | 按位与 |
---|---|
丨 | 按位或 |
^ | 异或 |
~ | 取反 |
>> | 右移 |
<< | 左移 |
1.&(按位与)
数字1 & 数字2 :二进制的每一位,两个都为1结果才是1,否则为0
3 & 2 --> 00000011 & 00000010 ==00000010 #2
作用让制定位上数置零,或者保留某一位上的值
2.|(按位或)
数字1 | 数字2:只要有一个为1结果就是1;否则两个都为0结果才是0
3|2 -->00000011 | 00000010=00000011
3.^(异或)
数字1 ^ 数字2:不同1相同为0
3^2 --> 00000011 | 00000010= 00000001 #1
-3^2 --> 11111101^ 00000010=10000001 #~1取反
4.~(取反)
~数字:将每一位取反
~3-->11111100=#-4
~-3-->00000010=2
5.左移(重点)
数字 << 位数:将补码向左移动指定的位数补上指定的0的个数
规律(正数负数都适用 m << n == m*(2^n)
print(10 << 1) #20
print(10 << 2) #40
6.右移
数字 >> 位数:将补码向右移动指定的位数,符号位不变,在符号位的后面补指定个数的0(正)或者1(负)
规律(只适用于正数):
m >> n == m//(2^n)
print(-15>>1)
04认识字符串
字符串(str)
1.什么是字符串
python中通过单引号或者双引号引起来的字符集就是字符串
字符串中引号中的字符集,就是由各种不同的字符来组成的。
12313'
'asdada'
'撒打算打打'
'$%^&FGHJKLBNMLL:><M(。-ω-)zzz'
2.Unicode编码
Python中的字符串中的字符采用的是Unicode编码
Unicode编码,是通过两个字节来对一个字符进行编码,0~2^15-1。几乎包含了世界上所有的符号。
ASCII编码:是通过一个字节来对一个字符进行编码
Unicode编码包含了ASCII码表
str1 ='hhh'
chr(数字):获取数字在Unicode编码中对应的字符,返回的是只有一个字符的字符串
print(chr(97)) #a
print(chr(0x1B78))
ord(字符):获取字符对应的Unicode码
print(ord('畅'))
print(chr(32993))
可以直接在字符串中写字符对应的编码值,格式:/u十六进制的编码值
str2='\u24464\u30021'
print(str2)
3.转义字符(适用于所有语言)
一些特殊功能和具有特殊意义的字符,直接放在字符串的引号中的无效,需要通过\来转义
\n -->换行
\t-->制表符 table
\ -->\
""-->""
print('asdf\nasd') #asdf
#asd
print('asdasd\'') #asdasd'