一刷晋、進制
計算機在存儲數(shù)字的時候都是以二進制的形式去存的。
進制 | 進位 |
---|---|
十進制 | 逢10進1 |
二進制 | 逢2進1 |
八進制 | 逢8進1 |
十六進制 | 逢16進1 |
1.十進制
舉例
100 78 95 3 65 45 62 165449
基數(shù):0,1,2,3,4,5,6,7,8,9
進位:逢10進1
每一位的值:111 = 1*10^0 + 1*10^1 + 1*10^2 = 111
2.二進制
舉例
100 110 011 01110 1111111 111110
基數(shù):0,1
進位:逢2進1
每一位的值:111 = 1*2^0 + 1*2^1 + 1*2^2 = 7
3.八進制
舉例
6543161 2454746 361614 77625
基數(shù):0,1,2,3,4,5,6,7
進位:逢8進1
每一位的值:111 = 1*8^0 + 1*8^1 + 1*8^2 = 73
4.十六進制
舉例
123fff 316bcd 546fccc 666aaa
基數(shù):0,1,2,3,4,5,6,7,8,9,a-f(A-F)
進位:逢16進1
每一位的值:111 = 1*16^0 + 1*16^1 + 1*16^2 = 273
5.進制之間的轉(zhuǎn)換
a.其他進制轉(zhuǎn)換成10進制:每一位上的數(shù)乘以進制冪次數(shù),然后求和山孔。
b.十進制轉(zhuǎn)其他進制:輾轉(zhuǎn)取余法感昼。
c.二進制轉(zhuǎn)8進制:每3位二進制轉(zhuǎn)換成1位的8進制。
d.二進制轉(zhuǎn)16進制:每4位二進制轉(zhuǎn)換成1位的16進制顺献。
例子
123:(2)1111011 60:(2)111100
123: (8)173
123: (16)7B
八轉(zhuǎn)二:一位8進制轉(zhuǎn)換成3位的二進制
(8)671 --> (2)110 111 001
十六轉(zhuǎn)二:一位的16進制轉(zhuǎn)換成4位的二進制
(16)67 --> (2)0110 0111
6.python對進制的支持
python支持通過二進制旗国、八進制、十進制和十六進制的形式來直接表示整數(shù)注整。
a.十進制:直接寫的數(shù)字的值都是十進制的數(shù)
例子
10
10
76
b.二進制:需要加前綴 -> 0b
例子
0b1010
0b1110
c.八進制:需要加前綴 -> 0o
例子
0o67
0o34
d.十六進制:需要加前綴 -> 0x
例子
0x78af
0xfa5
e.進制的轉(zhuǎn)換(結(jié)果是字符串)
函數(shù) | 功能 |
---|---|
bin(整數(shù)) | 將括號中的整數(shù)能曾,轉(zhuǎn)換成二進制形式的數(shù) |
oct(整數(shù)) | 將括號中的整數(shù)度硝,轉(zhuǎn)換成八進制形式的數(shù) |
hex(整數(shù)) | 將括號中的整數(shù),轉(zhuǎn)換成十六進制形式的數(shù) |
代碼
print(bin(10),bin(0o56),bin(0xaf))
print(oct(10),oct(0b110110),oct(0xaf))
print(hex(10),hex(0b110110),hex(0o56))
測試結(jié)果
二寿冕、原碼反碼和補碼
計算機在存數(shù)字的時候蕊程,存的是數(shù)字的二進制的補碼。
計算機內(nèi)存的最小單位是位:一位只能存儲兩個狀態(tài)驼唱。
8位 = 1字節(jié)
1.原碼:整數(shù)數(shù)字的二進制形式
最高位是符號位藻茂,如果是整數(shù)符號位為0,負數(shù)符號位為1玫恳。
例子
10的原碼 00000000 00001010
-10的原碼 10000000 00001010
2.反碼
(a)正數(shù)的反碼是它的原碼
(b)負數(shù)的反碼就是這個數(shù)的原碼的符號位不變辨赐,然后其他位置上的數(shù)取反(0->1,1->0)
例子
10 -> (原碼)10000000 00001010 -> (反碼)11111111 11110101
3.補碼
(a)正數(shù)的補碼就是它的原碼
(b)負數(shù)的補碼就是它的反碼加1
例子
-10 -> (反碼)11111111 11110101 -> (補碼)11111111 11110110
總結(jié):正數(shù)的反碼和補碼都是原碼;負數(shù)的補碼是反碼加1,反碼是原碼符號位不變纽窟,其它位取反肖油。
因為計算機中只有加法器,只能進行加操作臂港。存原碼對負數(shù)進行加操作的時候有問題森枪。
三、位運算
計算存數(shù)字存補碼审孽,計算的時候也是補碼县袱,最后結(jié)果看到時候看原碼。
位運算 | 符號 |
---|---|
按位與 | & |
按位或 | | |
異或 | ^ |
取反 | ~ |
右移 | >> |
左移 | << |
1.&(按位與)
數(shù)字1 & 數(shù)字2 :二進制的每一位佑力,兩個都為1結(jié)果才是1式散,否則為0
例子
3 & 2 --> 00000011 & 00000010 = 00000010
-3 & 2 --> 11111101 & 00000010 = 00000000
代碼
print(3&2)
print(-3&2)
測試結(jié)果
作用:讓指定位上數(shù)置零,或者保留某一位上的值打颤。
2.|(按位或)
數(shù)字1 | 數(shù)字2 :只要有一個為1暴拄,結(jié)果就是1 ,兩個都為0编饺,結(jié)果才是0
例子
3 | 2 --> 00000011 | 00000010 = 00000011
-3 | 2 --> 11111101 | 00000010 = (補)11111111 = (原)10000001
代碼
print(3|2)
print(-3|2)
測試結(jié)果
3.^(異或)
數(shù)字1 ^ 數(shù)字2:不同為1乖篷,相同為0
例子
3^2 --> 00000011 ^ 00000010 = 00000001
# -3^2 --> 11111101 ^ 00000010 = (補)11111111 = (原)10000001
代碼
print(3^2)
print(-3^2)
測試結(jié)果
4.~(取反)
~數(shù)字:將每一位取反
例子
# ~3 --> ~00000011 = (補)11111100 = 10000100
# ~-3 --> ~11111101 = (補)00000010
代碼
print(~3)
print(~-3)
測試結(jié)果
5.左移
數(shù)字 << 位數(shù):將補碼向左移動指定的位數(shù),符號位不變透且,在最后面補指定個數(shù)的0
規(guī)律(正數(shù)和負數(shù)都實用):m << n == m* (2^n)
代碼
print(10 << 3) #80
print(-10 << 3) #-80
測試結(jié)果
6.右移
數(shù)字 >> 位數(shù):將補碼向右移動指定的位數(shù)撕蔼,符號位不變,在符號位的后面補指定個數(shù)的0(正)或者1(負)
規(guī)律(只適用于正數(shù)):m >> n == m // (2^n)
代碼
print(10 >> 1)
print(-10 >> 2)
測試結(jié)果
四秽誊、認識字符串(str)
1.什么是字符串
(a)python中通過單引號或者雙引號引起來的字符集就是字符串鲸沮。
(b)字符串中引號中的字符集,就是用各種不同的字符來組成的锅论。
2.Unicode編碼
(a)python中字符串中字符采用的是Unicode編碼
(b)Unicode編碼:是通過兩個字節(jié)來對一個字符進行編碼讼溺,0 ~ 2^16-1(65535).它幾乎包含了世界上所有的符號
(c)ASCII編碼:是通過一個字節(jié)來對一個字符進行編碼
(d)Unicode編碼中包含了ASCII碼表
(e)chr(數(shù)字):獲取數(shù)字在Unicode編碼表中對應的字符,返回的是只有一個字符的字符串
(f)ord(字符):獲取字符對應的Unicode碼
(g)可以直接在字符串中寫字符對應的編碼值棍厌,格式:\u四位的十六進制
代碼
print(chr(97))
print(ord('程'),ord('序'),ord('員'))
str1 = '\u4e00\u4e01'
print(str1)
測試結(jié)果
3.轉(zhuǎn)義字符(適用于所有語言)
轉(zhuǎn)義字符:一些具有特殊功能和具有特殊意義的字符肾胯,直接放在字符串的引號中無效竖席,需要通過\來轉(zhuǎn)義。
轉(zhuǎn)義字符 | 功能 |
---|---|
\n | 換行 |
\ ' | ' |
\t | 制表符 |
\\ | \ |
\" | " |
代碼
str1 = 'xiao\\nyu'
str2 = '\thello\'world'
print(str1)
print(str2)
測試結(jié)果
五敬肚、Day3-作業(yè)
1.下列四組數(shù)毕荐,依次為二進制、八進制和十六進制艳馒,符合要求的是()
a. 12, 77, 10
b. 12, 80, 10
c. 11, 78, 19
d. 11, 77, 19
答案
D
2.二進制數(shù)加法運算的基本特點是“逢二進一”憎亚,即0+0=0,0+1=1弄慰,1+0=1第美,1+1=0并進位。運用這一基本法則和十進制運算的類似規(guī)律陆爽,得出二進制數(shù)加法運算1001+101的結(jié)果為()
a. 1001
b. 1010
c. 1110
d. 1101
答案
C
3.八進制754中的數(shù)碼7對應的位權(quán)是()
a. 10^2
b. 16^1
c. 8^2
d. 2^2
答案
C
4.十進制數(shù)53轉(zhuǎn)換成二進制數(shù)是()
a. 100101
b. 110101
c.100100
d.110100
答案
B
5.(偏難)已知什往,十進制中的8在X進制中表示為11,即(10)8=(X)11慌闭。請問這個X進制具體為()進制
a. 6
b. 7
c. 8
d. 9
答案
B
6.二進制的1000001相當十進制的____别威,二進制的100.001可以表示為__。
A: ① 62 ② 63 ③ 64 ④ 65
B: ① 23+2–3 ② 22+2–2 ③ 23+2–2 ④ 22+2–3
答案
④
④
7.使用位運算判斷一個數(shù)是否是奇數(shù)
注:奇數(shù)的二進制的最后一位是1驴剔,偶數(shù)是0
答案
print(0b1101 & 1 == 1)
print(0b1010 & 1 == 1)
結(jié)果為True則為奇數(shù)省古,否則為偶數(shù)
8.表達式0x13&0x17的值是()
答案
0x13
9.若x=2,y=3則x&y的結(jié)果是( )
答案
2
10.表達式 ord('a') | ord('z') 的運算結(jié)果是()
答案
123
11.在位運算中,操作數(shù)每右移一位丧失,其結(jié)果相當于( )
A.操作數(shù)乘以2
B.操作數(shù)除以2
C.操作數(shù)除以4
D.操作數(shù)乘以4
答案
B
12.設x 是一個整數(shù)(16位).若要通過x|y使x低8位置1豺妓,高8位不變,則y的二進制數(shù)是( )
答案
00000000 11111111