1.進(jìn)制
??計(jì)算機(jī)在存儲(chǔ)數(shù)字的時(shí)候是以二進(jìn)制的形式去存的,進(jìn)制有二進(jìn)制,八進(jìn)制,十進(jìn)制,十六進(jìn)制,如下表所示:
進(jìn)制 | 基數(shù) | 進(jìn)位 | 示例 |
---|---|---|---|
二進(jìn)制 | 01 | 2 | 11=1*20+1*21 |
八進(jìn)制 | 01234567 | 8 | 43=3*80+4*81 |
十進(jìn)制 | 0123456789 | 10 | 43=3*100+4*101 |
十六進(jìn)制 | 0~9 AF(af) | 16 | A4=4*160+10*161 |
1.1進(jìn)制的轉(zhuǎn)換
a:轉(zhuǎn)換為十進(jìn)制:每一位上的數(shù)乘以進(jìn)制冪次數(shù),然后求和。
b:十進(jìn)制轉(zhuǎn)換成其他進(jìn)制:輾轉(zhuǎn)取于法。
c:二進(jìn)制轉(zhuǎn)換為8進(jìn)制:每3位二進(jìn)制轉(zhuǎn)換位1位,如0 100 011(二進(jìn)制) 0 43
d:二進(jìn)制轉(zhuǎn)換為16進(jìn)制:每4位二進(jìn)制轉(zhuǎn)換位1位,如0 1001 0011(二進(jìn)制) 0 93
1.2python對進(jìn)制的支持:
??python支持通過各個(gè)進(jìn)制來直接表示整數(shù)。各進(jìn)制數(shù)表示如下表所示:
進(jìn)制 | 前綴 | 示例 |
---|---|---|
二進(jìn)制 | 0b/0B | 0b101 |
八進(jìn)制 | 0o\0O | 0o75 |
十進(jìn)制 | 無 | 100 |
十六進(jìn)制 | 0x\0X | 0xA5 |
??進(jìn)制轉(zhuǎn)化代碼:
bin(整數(shù))-->將括號中的整數(shù)轉(zhuǎn)化成二進(jìn)制數(shù);
oct(整數(shù))-->將括號中的整數(shù)轉(zhuǎn)換成八進(jìn)制數(shù);
hex(整數(shù))-->將括號中的整數(shù)轉(zhuǎn)換成十六進(jìn)制;
print(bin(160),bin(0o56),bin(0xA5))
print(oct(151),oct(0b11),oct(0x44))
print(hex(1023),hex(0b111),hex(0o57))
2.原碼補(bǔ)碼與反碼
??計(jì)算機(jī)在存儲(chǔ)數(shù)字時(shí),存的時(shí)數(shù)字的二進(jìn)制的補(bǔ)碼。計(jì)算機(jī)內(nèi)存的最小單位是位,1位有二個(gè)狀態(tài),8位為一個(gè)字節(jié),計(jì)算機(jī)中只有加法計(jì)數(shù)器,所以才會(huì)產(chǎn)生補(bǔ)碼來進(jìn)行減法計(jì)算。
原碼:整數(shù)數(shù)字的二進(jìn)制數(shù),最高位為符號位,正數(shù)符號位為0,負(fù)數(shù)符號位為1,如10的原碼為00000000 00001010,-10為10000000 0001010。
反碼:負(fù)數(shù)的原碼符號位不變,其他位的數(shù)取反(0—>1,1—>0),即為反碼;正數(shù)的反碼就是他的原碼。如10的補(bǔ)碼為00000000 00001010,-10反碼為11111111 11110101。
補(bǔ)碼:正數(shù)的補(bǔ)碼為他的原碼;負(fù)數(shù)的補(bǔ)碼是他的反碼加一。如10的補(bǔ)碼為00000000 00001010,-10的補(bǔ)碼為11111111 11110110。
3.位運(yùn)算
??位運(yùn)算符: &(按位與),|(按位或),^(異或),~(取反),>>(右移),<<(左移),計(jì)算機(jī)存儲(chǔ)的是補(bǔ)碼,讀取計(jì)算結(jié)果要讀原碼
??&(按位與):同1才為1。
& | 0 | 1 |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
print(3&2) #2
print(-3&2) #0 1111 1101&0000 0010==000000000
??作用:讓指定位置上的數(shù)置零,或者保留某一位上的值。
??|(按位或):同0才為0
| | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 1 |
print(3|2) #3
print(-3|2) #-1 1111 1101 | 0000 0010==(補(bǔ)碼)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==(補(bǔ)碼)1111 1111=(原碼)1000 0001
??~(取反):按位取反(包括符號位)
??注意:正數(shù)取反后為負(fù)數(shù),且負(fù)數(shù)在計(jì)算機(jī)中表現(xiàn)為補(bǔ)碼,要轉(zhuǎn)換為原碼。
print(~5) #-6 ~0101=(補(bǔ)碼)1010=(原碼)1110
print(~-5) #4 ~1101=~(補(bǔ)碼)1011=0100
??<<(左移):數(shù)字<<位數(shù),將補(bǔ)碼向左移動(dòng)指定位數(shù),后面用0補(bǔ)齊。
print(10<<1) #20 0000 1010<<1=0001 0100
print(-10<<1) #-20 1000 1010<<1=1111 0110(補(bǔ)碼)<<1=1110 1100(補(bǔ)碼)=1001 0100
??規(guī)律:m<<n==m*(2^n)
??右移:數(shù)字>>位數(shù),將補(bǔ)碼向右移動(dòng)指定位數(shù),符號位不變,在符號位后補(bǔ)指定個(gè)數(shù)的正數(shù)補(bǔ)0或負(fù)數(shù)補(bǔ)1
print(10>>1) #5 0000 1010>>1=00000101
print(-10>>1) #-20 1000 1010>>1=1111 0110(補(bǔ)碼)>>1=1111 1011(補(bǔ)碼)=10000101
??規(guī)律:m>>n==m//(2^n)
4.字符串(str)
???python中通過單引號和雙引號引起來的字符集就是字符串,如“jskf??j","int" "in"…………;字符串中引號中的字符串集,就是各種不同的字符來組成的。
4.1Unicode編碼
??python中字符串字符采用的是Unicode編碼;Unicode編碼是通過兩個(gè)字節(jié)來對一個(gè)字符進(jìn)行編碼,0~2^16-1(65536),幾乎包含了世界上所有的符號。其中也包含了ASCII碼表,ASCII編碼:是通過一個(gè)字節(jié)來對一個(gè)字符進(jìn)行編碼。
a:chr(數(shù)字):獲取數(shù)字在unicode編碼表中對應(yīng)的字符,返回只有一個(gè)字符的字符串。
b:ord(字符):獲取字符對應(yīng)的Unicode碼。
c:可以直接在字符串中寫對應(yīng)的編碼值,格式:\u4位的十六進(jìn)制的編碼值。
print(chr(0x45),chr(20))
print(ord("p"))
str1='\u45\u20'#通過編碼值寫字符串
轉(zhuǎn)義字符(適用于所有語言)
??一些特能和具有特殊意義的字符,放在字符串引號中無用,要用\來轉(zhuǎn)義,如\n換行,\t制表符,\\就是\ 。