day2-进制和字符串-总结
2018-09-27 本文已影响0人
_桑心人
2.进制
1.十进制
例如:123、133、56、5
-
基数:0,1,2,3,4,5,6,7,8,9
-
进位:逢10进1
-
每一位的值(例如):123 = 1* 100 + 2* 10 +3* 1 = 1* 10^2 + 2* 10^1 + 3* 10^0
2.二进制
----所有的二进制数都是由0和1组成(例如): 011101
-
基数:0、1
-
进位:逢2进1
-
每一位的值(例如): 11011 = 1* 2^0 + 1* 2^1 + 0* 2^2 + 1* 2^3 + 1* 2^4
3.八进制
-
基数:0,1,2,3,4,5,6,7
-
进位:逢8进1
-
每一位的值(例如):111 = 18^0 + 18^1 +1*8^2 = 73
4.十六进制
88 89 af aaffee 89
-
基数:0-9,a-f(A-F) - a(20).b1.c.d.e.f
-
逢16进1
-
每一位的值:111 = 1* 16^0 + 1* 16^1 + 1* 16^2 = 273
5.进制之间的转换
-
a.其他进制转换成10进制:每一位上的数乘以进制的幂次数的和
-
b.十进制转其他进制:辗转取余法
--实例
123: (2)111100 (8)173 (16)7B
-
c.二进制转8进制:每3位二进制转换成1位的8进制。二进制转16进制:每4位二进制转换成1位的16进制
-
d.八转二:一位8进制转换为3位的二进制
--实例
(8)671 --> (2)110 111 001
十六转二:一位十六进制转换为4位的二进制
--实例
(16)67 --> (2)0110 0111
6.python对进制的支持
---支持通过二进制、八进制和十六进制的形式来直接表示一个整数
-
a.十进制:直接写的数字的值都是十进制的数
-
b.二进制:需要加前缀 ->0b
-
c.八进制数:需要加前缀 -> 0o
-
d.十六进制:需要加前缀 -> 0x/0X
-
e.进制的转换(结果是字符串)
------bin(整数) --> 将括号中的整数转换成二进制形式的数
------oct(整数) --> 将括号中的整数转换成八进制形式的数
------hex(整数) --> 将括号中的整数转换成十六进制形式的数
3.原码反码补码
-----计算机在存数字的时候,存的是数字的二进制的补码
-----计算机内存的最小单位是位:1位只能存储两个状态 8位 == 1字节
-
a.原码:数字的二进制形式
十进制的10的原码就是:1010
最高位是符号位,如果是正数符号为0,负数符号为1
实例
10的原码 00000000 00001010
-10的原码 10000000 00001010
-
b.反码
正数的反码就是它的原码
负数的反码就是1这个数的原码的符号为不变,然后其他位置上的数取反
实例
10 -> (原码)00000000 00001010 ->(反码) 11111111 11110101
-
c.补码
正数的反码就是它的原码
负数的 补码是它的反码加1
实例
-10 -> (反码)11111111 11110101 -> (补码)11111111 11110110
-
总结:正的反码和补码都是原码;负数的补码是反码加1,反码是原码符号为不变,其他取反
-
为什么计算机存储数据的时候存补码?:因为计算机中只有加法器,不能进行减操作
4.位运算
-----计算存数存补码,计算的时候也是补码,最后结果看的时候看原码
-----位运算:&(按位与操作),|(按位或),^(异或),~(取反) >>(右移),<<(左移)
-
1.&(按位与)
数字1 & 数字二:二进制的每一位,两个都为1结果才是1否则为0
实例
3 & 2 --> 00000011 & 00000010 = 00000010
-3 & 2 --> 11111101 & 00000010 = 00000000
作用:让指定位上数置为0,或者保留某一位上的值
-
2.|(按位或)
数字1 | 数字2:只要有一个位1,结果就为1
实例
3 | 2 --> 00000011 | 00000010 = 00000011
-3 & 2 --> 11111101 & 00000010 = 11111111(补) = 10000001(原)
-
3.^异或
数字1 ^ 数字2:不同为1,相同为0
实例
3 ^ 2 --> 00000011 ^ 00000010 = 00000001
-3 ^ 2 --> 00000011 ^ 00000010 = 11111111(补) = 10000001(原)
-
4.~取反
~数字:将每一位取反
实例
~3 ---> ~00000011 = 11111100(补) = 10000100
~-3 ---> ~11111101 = 00000010
-
5.左移
数字 << 位数:将补码 向左移动指定的位数,符号位不变,在数字位的后面补0(正)或补1(负)
规律
规律(正数和负数都使用):m << n == m * (2^n)
-
6.右移(取整)
数字 >> 位数:将补码向右移动指定的位数,符号位不变,在符号位的后面补0(正)或补1(负)
规律(只适用于正数)
m >> n == m // (2^n)
实例
print(10 >> 1)
print(-10 >> 1)
print(10 >> 2)
print(-10 >> 2)
运行结果
5
-5
2
-3
[Finished in 0.3s]
5.字符串(str)
-
1.什么是字符串
python中通过单引号或者双引号引起来的字符集就是字符串字符串中引号中的字符集,就是由各种不同的字符来组成的
实例
'abhsjjd'
"26238"
'哈快速减肥'
'#$%#^^'
'65165hvh$W$^看就看'
-
2.Unicode编码
python中的字符串中字符采用的是Unicode编码
Unicode(0~2^16-1)编码:是通过两个字节来对一个字符几乎 包含了全世界所有的符号
ASCII编码:是通过一个字节来对一个字符进行编码
Unicode编码中包含了ASCII码表
------chr(数字):获取数字在Unicode编码表中对应的字符
实例
print(chr(97))
print(chr(0x1813))
print(chr(0x1b02))
运行结果
a
᠓
ᬂ
[Finished in 0.2s]
------ord(字符):获取字符对应的Unicode码
实例
print(ord('余'), ord('婷'))
print(ord('%'))
print(0xffff)
运行结果
20313 23159
37
65535
[Finished in 0.2s]
------可以直接在字符串中写对应的编码值,格式:\u四位的十六进制的编码值
实例
str1 = '\u4e00'
print(str1)
str1 = '\u4e00\u4e02'
print(str1)
运行结果
一
一丂
[Finished in 0.2s]
-
3.转义字符(适用于所有语言)
一些特殊功能和具有特护意义的字符,直接放在字符串中的引号中无效,需要\转义
------ \n --> 换行
实例
str1 = 'huy\nushs'
print(str1)
运行结果
huy
ushs
[Finished in 0.2s]
------ \ ' --> '
实例
str1 = 'hello\'word'
print(str1)
运行结果
hello'word
[Finished in 0.2s]
------ \t --> 制表符
------ \ \ --> \
实例
str1 = 'hello\'wo"rd\a'
print(str1)
运行结果
hello'wo"rd�
[Finished in 0.2s]