一蚜退、進(jìn)制
計(jì)算機(jī)在存儲(chǔ)數(shù)字的時(shí)候都是以二進(jìn)制的形式去存的
十進(jìn)制幔睬、十六進(jìn)制背亥、八進(jìn)制般眉、二進(jìn)制
1.十進(jìn)制
100 78 3 223 82391737417234
基數(shù):0我纪,1慎宾,2丐吓,3,4趟据,5券犁,6,7之宿,8族操,9
進(jìn)位:逢10進(jìn)1
每一位的值: 123 = 1100 + 210 + 31 = 110^2 + 210^1 + 310^0
111 = 1 * 10^0 + 1 * 10^1 + 1 * 10^2 = 111
2.二進(jìn)制
所有二進(jìn)制數(shù)都是由0和1組成: 011001
基數(shù):0,1
進(jìn)位:逢2進(jìn)1 100 1011
每一位的值:11011 = 12^0 + 12^1 + 02^2 + 12^3 + 1*2^4 = 27
111 = 1 * 2^0 + 1 * 2^1 + 1 * 2^2 = 7
3.八進(jìn)制
基數(shù):0比被,1色难,2,3等缀,4枷莉,5,6尺迂,7
進(jìn)位:逢8進(jìn)1
每一位的值:111 = 1 * 8^0 + 1 * 8^1 + 1 * 8^2 = 73
4.十六進(jìn)制
89 89af aaffee 89f
基數(shù):0-9笤妙,a-f(A-F) ---> a(10),b(11),c(12),d(13),e(14),f(15)
進(jìn)位:逢16進(jìn)1
每一位的值:111 = 116^0 + 116^1 + 1*16^2 = 273
5.進(jìn)制之間的轉(zhuǎn)換
a.其他進(jìn)制轉(zhuǎn)換成10進(jìn)制:每一位上的數(shù)乘以進(jìn)制幕次數(shù),然后求和
b.十進(jìn)制轉(zhuǎn)其他進(jìn)制:輾轉(zhuǎn)取余法
123:(2)0 0111 1011 60:(2)111100
123:(8)173 173
123:(16)7B 7b
c.二進(jìn)制轉(zhuǎn)8進(jìn)制: 每3位二進(jìn)制轉(zhuǎn)換成1位;
八轉(zhuǎn)二: 一位8進(jìn)制轉(zhuǎn)換成3位的二進(jìn)制
(8)671 --> (2)110 111 001
d.二進(jìn)制轉(zhuǎn)16進(jìn)制: 每4位二進(jìn)制轉(zhuǎn)換成1位
十六轉(zhuǎn)二: 一位的16進(jìn)制轉(zhuǎn)換成4位的二進(jìn)制
(16)67 --> (2)0110 0111
6.python對(duì)進(jìn)制的支持
python支持通過二進(jìn)制噪裕、八進(jìn)制蹲盘、十進(jìn)制和十六進(jìn)制的形式來直接表示整數(shù)
a.十進(jìn)制:直接寫的數(shù)字的值都是十進(jìn)制的數(shù)
10
100
76
110011
b.二進(jìn)制:需要加前綴 -> 0b
number = 0b1010
number2 = 0b1110 + 10
print(number2)
c.八進(jìn)制:需要加前綴 -> 0o/0O
0o67
0o34
d.十六進(jìn)制:需要加前綴 -> 0x/0X
0x78af
number = 0Xfa5
print(number)
print(type(0xfa))
e.進(jìn)制的轉(zhuǎn)換(結(jié)果是字符串)
bin(整數(shù)) --> 將括號(hào)中的整數(shù),轉(zhuǎn)換成二進(jìn)制形式
print(bin(10), bin(0o56), bin(0xaf))
print(type(bin(10)))
oct(整數(shù)) --> 將括號(hào)中的整數(shù)膳音,轉(zhuǎn)換成八進(jìn)制形式
print(oct(10), oct(0b110110), oct(0xaf))
hex(整數(shù)) --> 將括號(hào)中的整數(shù)召衔,轉(zhuǎn)換成十六進(jìn)制形式
print(hex(10), hex(0b110110), hex(0o56))
二、原碼的反碼與補(bǔ)碼
計(jì)算機(jī)在存數(shù)字的時(shí)候祭陷,存的是數(shù)字的二進(jìn)制的補(bǔ)碼
計(jì)算機(jī)內(nèi)存的最小單位是位:1位只能存儲(chǔ)兩個(gè)狀態(tài)
8位 = 1字節(jié)
a.原碼:整數(shù)數(shù)字的二進(jìn)制形式
十進(jìn)制的10的原碼就是:1010
最高位是符號(hào)位苍凛,如果正數(shù)符號(hào)位為0,負(fù)數(shù)符號(hào)位為1
10的原碼 00000000 00001010
-10的原碼 10000000 00001010
b.反碼
正數(shù)的反碼是它的原碼
負(fù)數(shù)的反碼就是這個(gè)數(shù)的原碼的符號(hào)位不變兵志,然后其他位置上的數(shù)取反(0->1,1->0)
-10 -> (原碼)10000000 00001010 ->(反碼)11111111 11110101
c.補(bǔ)碼
正數(shù)的補(bǔ)碼就是它的原碼
負(fù)數(shù)的補(bǔ)碼是它的反碼加1
-10 -> (反碼)11111111 11110101 -> (補(bǔ)碼)1111111 11110110
總結(jié):正的反碼和補(bǔ)碼都是原碼;負(fù)數(shù)的補(bǔ)碼是反碼加1醇蝴,反碼是原碼符號(hào)位不變,其他位取反
為什么計(jì)算機(jī)存儲(chǔ)數(shù)據(jù)的時(shí)候存補(bǔ)碼想罕?:因?yàn)橛?jì)算機(jī)中只有加法器悠栓,只能進(jìn)行加操作。
存原碼對(duì)負(fù)數(shù)進(jìn)行加操作的時(shí)候有問題
三按价、位運(yùn)算
計(jì)算存數(shù)字存補(bǔ)碼惭适,計(jì)算的時(shí)候也是補(bǔ)碼,最后結(jié)果看的時(shí)候看原碼
位運(yùn)算符:&(按位與)俘枫,|(按位或), ^(異或), ~(取反), >>(右移)腥沽, <<(左移)
1.&(按位與)
數(shù)字1 & 數(shù)字2 :兩個(gè)都為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: 只要有一個(gè)為1,結(jié)果就是1;兩個(gè)都為茅信,結(jié)果才是0
3 | 2 --> 00000011 | 00000010 = 00000011
-3 | 2 --> 11111101 | 00000010 = (補(bǔ))11111111 = (原)10000001
print(3|2)
print(-3|2)
3.^(異或)
數(shù)字1 ^ 數(shù)字2: 不同為1盾舌,相同為0
3^2 --> 00000011 ^ 00000010 = 00000001
-3^2 --> 11111101 ^ 00000010 = (補(bǔ))11111111 = 10000001
print(3^2)
print(-3^2)
4.~(取反)
~數(shù)字: 將每一位取反
~3 ---> ~00000011 = 11111100(補(bǔ)) = 10000100
~-3 ---> ~11111101 = 00000010
print(~3)
print(~-3)
5.左移(重點(diǎn)掌握)
數(shù)字 << 位數(shù): 將補(bǔ)碼向左移動(dòng)指定的位數(shù),符號(hào)位不變蘸鲸,在最后面補(bǔ)指定個(gè)數(shù)的0# 規(guī)律(正數(shù)和負(fù)數(shù)都實(shí)用):m << n == m * (2^n)
print(10 << 3) # 20 102^1 102^2 10*2^3
print(-10 << 2) # -20
print(2 << 2)
print(-23 << 2)
num * 2 == num << 1 num * 4 == num << 2
6.右移
數(shù)字 >> 位數(shù): 將補(bǔ)碼向右移動(dòng)指定的位數(shù)妖谴,符號(hào)位不變,在符號(hào)位的后面補(bǔ)指定個(gè)數(shù)的0(正)或者1(負(fù))
規(guī)律(只適用于正數(shù)):m >> n == m // (2^n)
print(10 >> 1)
print(-10 >> 1)
print(-10 >> 2)
num = 139425088889302854928304850238540982304583098450932840583209584092354932845972389475893457235
print(num)
四酌摇、認(rèn)識(shí)字符
字符串(str)
1.什么是字符串
python中通過單引號(hào)或者上引號(hào)引起來的字符集就是字符串
字符串中引號(hào)中的字符集膝舅,就是又各種不同的字符來組成的。
'abhsjjd'
'26238'
'海金沙'
'^&#@(@&@'
'??'
'in'
'223hdu話說接電話*&&'
"uuk"
"237ashs"
'a'
2.Unicode編碼
python中字符串中字符采用的是Unicode編碼
Unicode編碼:是通過兩個(gè)字節(jié)來對(duì)一個(gè)字符進(jìn)行編碼(0~ 2^16-1)窑多。它幾乎包含了世界上所有的符號(hào)
ASCII編碼:是通過一個(gè)字節(jié)來對(duì)一個(gè)字符進(jìn)行編碼
Unicode編碼中包含了ASCII碼表
str1 = 'how'
print(2**15)
str2 = '余婷'
print(str2)
chr(數(shù)字): 獲取數(shù)字在Unicode編碼表中對(duì)應(yīng)的字符,返回的是只有一個(gè)字符的字符串
print(chr(97))
print(chr(0x1813))
print(chr(0x1b02))
ord(字符): 獲取字符對(duì)應(yīng)的Unicode碼
print(ord('余'), ord('婷'))
print(ord('??'))
print(0xffff)
可以直接在字符串中寫字符對(duì)應(yīng)的編碼值仍稀,格式:\u四位的十六進(jìn)制
str1 = 'ah\u4e00\u4e01jhuu'
print(str1)
3.轉(zhuǎn)義字符(適用于所有語言)
一些特能和具有特殊意義的字符,直接放在字符串的引號(hào)中無效埂息,需要通過\來轉(zhuǎn)義
\n ---> 換行
' ----> '
\t ----> 制表符
\ ---->
" ----> "
str1 = 'huy\nushs'
print(str1)
str1 = '\thello'wo"rld\a'
print(str1)