day3_进制与字符串
1.进制
计算机在存储数字的时候是以二进制的形式去存的,进制有二进制,八进制,十进制,十六进制,如下表所示:
进制 | 基数 | 进位 | 示例 |
---|---|---|---|
二进制 | 01 | 2 | 11=1*20+1*21 |
八进制 | 01234567 | 8 | 43=3*80+4*81 |
十进制 | 0123456789 | 10 | 43=3*100+4*101 |
十六进制 | 0~9 AF(af) | 16 | A4=4*160+10*161 |
1.1进制的转换
二进制辗转取余法.PNGa:转换为十进制:每一位上的数乘以进制幂次数,然后求和。
b:十进制转换成其他进制:辗转取于法。
c:二进制转换为8进制:每3位二进制转换位1位,如0 100 011(二进制) 0 43
d:二进制转换为16进制:每4位二进制转换位1位,如0 1001 0011(二进制) 0 93
1.2python对进制的支持:
python支持通过各个进制来直接表示整数。各进制数表示如下表所示:
进制 | 前缀 | 示例 |
---|---|---|
二进制 | 0b/0B | 0b101 |
八进制 | 0o\0O | 0o75 |
十进制 | 无 | 100 |
十六进制 | 0x\0X | 0xA5 |
进制转化代码:
bin(整数)-->将括号中的整数转化成二进制数;
oct(整数)-->将括号中的整数转换成八进制数;
hex(整数)-->将括号中的整数转换成十六进制;
print(bin(160),bin(0o56),bin(0xA5))
print(oct(151),oct(0b11),oct(0x44))
print(hex(1023),hex(0b111),hex(0o57))
2.原码补码与反码
计算机在存储数字时,存的时数字的二进制的补码。计算机内存的最小单位是位,1位有二个状态,8位为一个字节,计算机中只有加法计数器,所以才会产生补码来进行减法计算。
原码:整数数字的二进制数,最高位为符号位,正数符号位为0,负数符号位为1,如10的原码为00000000 00001010,-10为10000000 0001010。
反码:负数的原码符号位不变,其他位的数取反(0—>1,1—>0),即为反码;正数的反码就是他的原码。如10的补码为00000000 00001010,-10反码为11111111 11110101。
补码:正数的补码为他的原码;负数的补码是他的反码加一。如10的补码为00000000 00001010,-10的补码为11111111 11110110。
3.位运算
位运算符: &(按位与),|(按位或),^(异或),~(取反),>>(右移),<<(左移),计算机存储的是补码,读取计算结果要读原码
&(按位与):同1才为1。
& | 0 | 1 |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
print(3&2) #2
print(-3&2) #0 1111 1101&0000 0010==000000000
作用:让指定位置上的数置零,或者保留某一位上的值。
|(按位或):同0才为0
| | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 1 |
print(3|2) #3
print(-3|2) #-1 1111 1101 | 0000 0010==(补码)11111111=(原码)1000 0001
^(异或):不同为1,相同为0
^ | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 0 |
print(3|2) #1
print(-3|2) #-1 1111 1101 ^ 0000 0010==(补码)1111 1111=(原码)1000 0001
~(取反):按位取反(包括符号位)
注意:正数取反后为负数,且负数在计算机中表现为补码,要转换为原码。
print(~5) #-6 ~0101=(补码)1010=(原码)1110
print(~-5) #4 ~1101=~(补码)1011=0100
<<(左移):数字<<位数,将补码向左移动指定位数,后面用0补齐。
print(10<<1) #20 0000 1010<<1=0001 0100
print(-10<<1) #-20 1000 1010<<1=1111 0110(补码)<<1=1110 1100(补码)=1001 0100
规律:m<<n==m*(2^n)
右移:数字>>位数,将补码向右移动指定位数,符号位不变,在符号位后补指定个数的正数补0或负数补1
print(10>>1) #5 0000 1010>>1=00000101
print(-10>>1) #-20 1000 1010>>1=1111 0110(补码)>>1=1111 1011(补码)=10000101
规律:m>>n==m//(2^n)
4.字符串(str)
python中通过单引号和双引号引起来的字符集就是字符串,如“jskf😁j","int" "in"…………;字符串中引号中的字符串集,就是各种不同的字符来组成的。
4.1Unicode编码
python中字符串字符采用的是Unicode编码;Unicode编码是通过两个字节来对一个字符进行编码,0~2^16-1(65536),几乎包含了世界上所有的符号。其中也包含了ASCII码表,ASCII编码:是通过一个字节来对一个字符进行编码。
a:chr(数字):获取数字在unicode编码表中对应的字符,返回只有一个字符的字符串。
b:ord(字符):获取字符对应的Unicode码。
c:可以直接在字符串中写对应的编码值,格式:\u4位的十六进制的编码值。
print(chr(0x45),chr(20))
print(ord("p"))
str1='\u45\u20'#通过编码值写字符串
转义字符(适用于所有语言)
一些特能和具有特殊意义的字符,放在字符串引号中无用,要用\来转义,如\n换行,\t制表符,\\就是\ 。