一坯钦、進制
計算機在存儲數(shù)據(jù)時候都是以二進制的形式去存的
十進制预皇、十六進制、八進制婉刀、二進制
1.十進制
基數(shù):0吟温,1,2突颊,3鲁豪,4,5律秃,6爬橡,7,8棒动,9
進位;鋒十進一
每一位的值:123 = 1100 + 210 + 3*1
2.二進制
基數(shù):0糙申,1
所有的二進制數(shù)都是由0和1組成
進位:逢二進一
每一位的值:11011 = 12^0+121+0*22+12^3+12^4 = 27
3.八進制
基數(shù):0,1船惨,2柜裸,3,4粱锐,5疙挺,6,7
進位:逢8進1
每一位的值:111 = 18^0+181+1*82 = 73
4.十六進制
基數(shù):0-9卜范,a-f(A-F) a,b,c,d,e,f
進位:逢16進1
每一位的數(shù):111 = 116^0+1161+1*162 =273
5.進制之間的轉(zhuǎn)換
- a.其他進制轉(zhuǎn)換成十進制:每一位上的數(shù)乘以進制冪次數(shù)的和
- b.十進制轉(zhuǎn)其他進制:輾轉(zhuǎn)取余法
123:(2)1111011
123: (8) 173
123: (16) 7B - c.二進制轉(zhuǎn)換成八進制:每3位二進制轉(zhuǎn)換成一次1位的八進制
八轉(zhuǎn)換二衔统;一位八進制轉(zhuǎn)換成3位二進制
(8)671 --> (2)110 111 001 - d.二進制轉(zhuǎn)換成16進制:每4位轉(zhuǎn)換成1位
67-->0110 0111
八進制和十六位進制轉(zhuǎn)換都先轉(zhuǎn)換成二進制再轉(zhuǎn)換
6.python對進制的支持
python支持通過二進制鹿榜、八進制海雪、十進制和十六進制的形式來直接表示整數(shù)
- a.十進制:直接寫得數(shù)字的值都是十進制的數(shù)
- b.二進制:需要加前綴->0b
0b1010
- c.八進制;需要加前綴-> 0o/0O
0o67
0o34
- d.十六進制:需要加前綴-> 0x/0X
0x78af
number = 0xfa5
print(type(0xfa))
- e.進制的轉(zhuǎn)換
bin(整數(shù))-->將括號中的整數(shù)舱殿,轉(zhuǎn)換成二進制形式的數(shù)
print(bin(10),bin(0o56),bin(0xaf))
oct(整數(shù))--> 將括號中的整數(shù)奥裸,轉(zhuǎn)換成八進制形式
print(oct(10),oct(0b110110),oct(0xaf))
hex(整數(shù))--> 將括號中的整數(shù),轉(zhuǎn)換成十六進制形式
print(hex(10),hex(0b110110),hex(0xaf))
二沪袭、原碼湾宙、反碼和補碼
計算機在存數(shù)字的時候,存的是數(shù)字的二進制的補碼
計算機內(nèi)存的最小單位是位冈绊,1位只是存儲兩個狀態(tài)
8位 = 1字節(jié)
a.原碼:數(shù)字的二進制形式
十進制的10的原碼就是:1010
最高位是符號位侠鳄,如果正數(shù)符號位為0,負數(shù)符號位為1
10的原碼 00000000 00001010
-10的原碼 10000000 00001010
b.反碼
正數(shù)的反碼是它的原碼
負數(shù)的反碼就是這個數(shù)的原碼符號位不變的死宣,然后其他位置上的數(shù)字取反
10 -> (原碼)10000000 00001010 ——>(反碼)11111111 11110101
c.補碼
正數(shù)的補碼就是它的原碼
負數(shù)的補碼是它的反碼加1
-10 -> (反碼)11111111 11110101 -> (補碼)11111111 11110110
總結(jié):正的反碼和補碼都是原碼伟恶;負數(shù)的補碼是反碼加1,反碼就是原碼符號位不變毅该,其他位取反
為什么計算機存儲數(shù)據(jù)的時候存補碼博秫?:因為計算機中只有加法器潦牛,只能進行加操作
存原碼對負數(shù)進行加操作的時候有問題
三、位運算
計算機存數(shù)字存補碼挡育,計算的時候也是補碼巴碗,最后結(jié)果看的時候看原碼
位運算符:&(按位與),|(按位或), ^(異或), ~(取反)即寒,>>(右移), <<(左移)
&(按位與)
數(shù)字1 & 數(shù)字2 :二進制的每一位橡淆,兩個都為1結(jié)果才是1,否則為0
3 & 2 --> 00000011 & 00000010 == 00000010
-3 & 2--> 11111101 & 00000010 == 00000000
print(3&2)
print(-3&2)
作用:讓指定位上數(shù)置零母赵,或者保留夢一位上的值
2.|(按位或)
數(shù)字1 | 數(shù)字2:只要有一個為1明垢,結(jié)果就是1;兩個都為0市咽,結(jié)果才是0
-3 | 2--> 11111101 | 00000010 == 11111111(補碼) == 100000001(原碼)
print(-3|2)
3. ^(異或)
數(shù)字1 ^ 數(shù)字2:不同為1痊银,相同為0
-3 ^ 2--> 11111101 ^ 00000010 == 11111111(補碼) == 100000001(原碼)
print(-3^2)
4.~(取反)
~數(shù)字: 將每一位取反
print(~-3)
5.左移
數(shù)字 << 位數(shù) :將補碼移動指定位數(shù),后面用零補齊
print(10 << 1)
print(-10 << 1)
print(-10 << 4)
左移特點 : 結(jié)果 == 數(shù)字2^位數(shù) m << n == m(2^n)
num * 2 == num << 1 num * 4 == num << 2
6.右移
數(shù)字 >> 位數(shù):將補碼向右移動指定的位數(shù)施绎,符號位不變溯革,在符號位的后面補指定個數(shù)的0(正)或者1(負)
規(guī)律(只適用于正數(shù)): m >> n == m // (2^n)
print(10 >> 1)
print(-10 >> 1)
print(-10 >> 2)
print(-15 >> 1)
四、字符串
字符串(str)
python中通過單引號或者雙引號引起來的字符集就是字符串
字符串中引號中的字符集谷醉,就是由各種不同的字符來組成
'4444adc'
'龍海'
2.Unicode編碼
python中字符串中字符采用的是Unicode編碼
Unicode編碼致稀,是通過兩個字節(jié)來對一個字符進行編碼。0 ~ 2^16-1
幾乎包含了世界上所有字符
ASSCII編碼:是通過一個字節(jié)對一個字符編碼
Unicode編碼包含ASSCII編碼表
chr(數(shù)字):獲取數(shù)字在Unicode編碼表中對應的字符俱尼,返回的是只有一個字符的字符串
print(chr(97))
ord(字符):獲取字符對應的Unicode碼
print(ord('龍'))
print(ord('海'))
可以直接在字符串中寫字符對應的編碼值抖单,格式:\u十六進制編碼
str1 = '\u4e00\u4e01'
print(str1)
3.轉(zhuǎn)義字符(適用于所有語言)
一些特殊功能或者具有特殊意義的字符,直接放在字符串的引號中無效遇八,需要通過\來轉(zhuǎn)移
\n ---> 換行
'--->'
\t ---> 制表符(四個空格)
\ --->
"--->"
str1 = 'helloworld'
str1 = '\thello\tworld'
print(str1)