2018-09-27day3-进制和字符串
一、进制
计算机存储数字时都是以二进制形式存储
十进制、十六进制、八进制、二进制
1.十进制
基数:0-9
进位:逢十进一
每一位的值:123 = 1 * 100+2 * 10+3 * 1=1*10^2+1 * 10^1+3 * 10^0
2.二进制
所有的二进制数都是由01组成
基数:0,1
逢二进一
每一位的值:11011=1 * 2^0+1 * 2^1+1 * 2^3+1 * 2^4=1+2+8+16=27
3.八进制
基数:0-7
进位:逢八进一
每一位的值:111=1 * 8^0+1 * 8^1+1 * 8^2=73
4.十六进制
基数:0-9 a-f(A-F)
进位:逢十六进一
每一位的值:111=1 * 16^0+1 * 16^1+1 * 16^2=273
5.进制之间的转换
a.其他进制转化十进制:每一位上的数乘以进制的幂次数的和
b. 十进制转其他进制:辗转取余法
123:(2):1111011
123:(8):173
123:(16):7b
c.二进制转八进制:每3位二进制转换成1位八进制
八进制转二进制:每1位八进制转换成3位二进制
(8)671-->(2)110 111 001
d.二进制转16进制:每4位二进制转换成1位16进制
16进制转二进制:每1位八进制转换成4位二进制
(16)-->(2)0110 0111
6.python对于进制的支持
python支持通过二进制、八进制、十六进制、十进制的形式来直接表示整数
a.十进制:直接写的数字的值都是十进制的数
b.二进制:前缀-->0B
print(0B110101) #结果53
c.八进制:前缀-->0o
print(0o67) #结果55
d.十六进制:前缀-->0x
print(0x213FAD) #结果2178989
e.进制的转换
bin(整数)-->二进制
演示:
代码
![](https://img.haomeiwen.com/i14187444/0e4ef77181e9d5eb.png)
结果
![](https://img.haomeiwen.com/i14187444/5cc2c88c09779e17.png)
oct(整数)-->将括号中的整数,转换成八进制
演示:
代码
![](https://img.haomeiwen.com/i14187444/b61828ea8e963720.png)
结果
![](https://img.haomeiwen.com/i14187444/9fe081b25d64c5d6.png)
hex(整数)-->将括号中的整数,转换成十六进制
演示:
代码
![](https://img.haomeiwen.com/i14187444/e2321765aa39d774.png)
结果
![](https://img.haomeiwen.com/i14187444/d5b08b53d954bb9f.png)
===========================================================
二、原码反码补码
计算机在存数字的时候,存的是数值的二进制的补码
计算机内存的最小单位是位:1位只能存储两个状态
8位=1字节
a.原码:整数数字的二进制形式
十进制的10的原码就是:1010
最高位是符号位,如果正数符号位0 负数符号位1
10的原码00000000 00001010
-10的原码10000000 00001010
b.反码
正数的反码就是他的原码
负数的反码就是这个数的原码的 符号位 不变,然后其他位置上的数取反0-->1,1-->0
-10->(原码)10000000 00001010->(反码)11111111 11110101
c.补码
正数的补码就是他的原码
负数的补码是他的反码加1
(反码)11111111 11110101->(补码)11111111 11110110
总结:
正数的反码和补码都是原码;负数的补码是反码加1,反码是原码符号位不变,其他为取反
为什么计算机存储数据的时候存补码? 因为计算机中只有加法器,只能进行加操作。存原码,对负数进行加操作的时候有问题
===========================================================
三、位运算
位运算符:&(按位与,)|(按位或)^(异或)~(取反)>>(右移)<<(左移)
1.&(按位与)
数字1 & 数字2 :二进制的每一位,两个都为1结果才是1,否则为0
10 & 2-->00000011 & 00000010 == 00000010
作用:让指定位上的数置零,或者保留某一位上的值
2.|(按位或)
数字1|数字2:只要有一个为1,结果就位1;两个都为0结果才0
3.^(异或)
数字1^数字2:不用为1,相同为0
4.~(取反)
~数字:将每一位取反
5.<<(左移)(重点掌握!)
数字<<位数:将补码向左移动指定的位数,符号位不变,
在符号位的后面补指定个数的0。
!规律:m<<n ==m*(2^n)(正负都实用)
!num*2 == num<<1 (位运算效率高,执行速度快)
演示:
代码![](https://img.haomeiwen.com/i14187444/e77862875eb03f4b.png)
结果
![](https://img.haomeiwen.com/i14187444/e4f74457789f5f96.png)
6.>>(右移)
数字>>位数:将补码向右移动指定的位数,符号位不变,
在符号位的后面补指定个数的0(正)或者1(负数)
规律:(只适用于正数) m>>n==m//(2^n)
===========================================================
四、认识字符
字符串(str)
1.什么是字符串
python中通过单引号或者上引号引起来的字符集就是字符串
字符串中引号中的字符集就是由各种不同的字符来组成的。
2.Unicode编码
python中字符串中的字符采用的是Unicode编码
Unicode编码,是通过两个字节,来对一个字符进行编码,(0~2^16-1(65535))
几乎包含了世界上所有的符号
ASCII编码:是通过一个字节来对一个字符进行编码
Unicode码表中包含了ASCII码表
chr(数字):获取数字在Unicode编码表中对应的字符,返回的是只有一个字符的字符串
演示:
代码![](https://img.haomeiwen.com/i14187444/44be6f6e18705d73.png)
结果
![](https://img.haomeiwen.com/i14187444/914cb1bf6e325d24.png)
ord(字符):获取字符对应的Unicode码
演示:
代码![](https://img.haomeiwen.com/i14187444/0db3b6e5f451c1fa.png)
结果
![](https://img.haomeiwen.com/i14187444/3cc10c7b1661ada6.png)
可以直接在字符串中写字符对应的编码值,格式:\u四位的十六进制的编码值
演示:
代码
![](https://img.haomeiwen.com/i14187444/1ef9b6af07c8617c.png)
结果
![](https://img.haomeiwen.com/i14187444/d2bdc2f47a37a635.png)
3.转义字符(适用于所有语言)
一些特殊和具有特殊意义的字符,直接放在字符串的引号中无效,需要通过\来转义
\n--->换行
'--->'
\t--->制表符
\--->
""--->"
演示:
代码![](https://img.haomeiwen.com/i14187444/5b0a9c8cbc0d3a59.png)
结果
![](https://img.haomeiwen.com/i14187444/5d4fbc314a6626fd.png)