python
算法
進制類型 | 組成 | 代碼格式 |
2進制 | 由2個數字組成,有0 和 1 | 0b101 |
8進制 | 由8個數字組成,有0,1,2,3,4,5,6,7 | 0o127 |
10進制 | 有10個數字組成,有0,1,2,3,4,5,6,7,8,9 | 258 |
16進制 | 有16個數字組成,有0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f (字母不區分大小寫, a至f分別表明10,11,12,13,14,15) | 0xff、0Xff、0XFF |
其餘進制轉換爲10進制的計算公式:∑X * Yn;
其中 X 爲第 n 位的數值,Y 爲進制值[2, 8, 16],n爲第幾位,注意:n 是從 0 開始。 python 中用於進制轉換的內置函數有:
int
(x, base=10): 將 x 轉爲 10 進制, 若是 x 是其餘的進制數的字符串, 則 base 應爲相應的進制數. 如 int("0b10100101", 2).也可使用 format 函數轉化, 具體能夠自行查閱.(1)2進制轉化爲10進制: 2進制如 0b10100101 轉化爲十進制時,運算爲:1*2^0 + 0*2^1 + 1*2^2 + 0*2^3 + 0*2^4 + 1*2^5 + 0*2^6 + 1*2^7= 1 + 0 + 4 + 0 + 0 + 32 + 0 + 128 = 165 在Python中,可使用 int 內置函數來轉化爲2進制,例如:int(0b10100101) (2)10進制轉化爲2進制 用待除數(如 426)除以2,得出的結果再去不停地除以2,直到除完最後的結果小於2中止,,在把每一個階段求得的餘數從下到上依次拼接完畢便可。 在Python中,可使用 bin 內置函數來轉化爲2進制,例如:bin(98)
(1)8進制轉化爲10進制: 將8進制(0o127)轉換爲10進制:運算爲:7*8^0 + 2*8^1 + 1*8^2 = 7 + 16 + 64 = 87 在Python中,可使用 oct 內置函數來轉化爲2進制,例如:int(0o127) (2)10進制轉化爲8進制 例如:用426除以8,得出的結果再去不停地除以8, 直到除完最後的結果小於8中止, 在把每一個階段求得的餘數從下到上依次拼接完畢便可 在Python中,可使用 oct 內置函數來轉化爲2進制,例如:oct(426)
(1)16進制轉化爲10進制: 例如:帶轉化數爲0xff ,運算爲:15*16^0 + 15*16^1 = 255 在Python中,可使用 oct 內置函數來轉化爲2進制,例如:int(0x42a) (2)10進制轉化爲16進制: 例如用426除以16,得出的結果再去不停地除以16, 直到除完最後的結果小於16中止, 在把每一個階段求得的餘數從下到上依次拼接完畢便可 在Python中,可使用 oct 內置函數來轉化爲2進制,例如:hex(426)
計算機的全部數據在底層都是以二進制的補碼形式存儲,實際人們看到的數字是原碼轉化來的,而原碼是經過補碼獲得的。 即:補碼 -> 原碼 -> 最後人們看到的數。 進制轉換的時候須要先把內存中存儲的補碼拿出來變成原碼在進行轉換輸出。 正數高位補0 負數高位補1(前面空白位全是1) 數字 1 00000000 1 正數高位都補0 數字-1 11111111 1 負數高位都補1 原碼: 用來轉換對應進制 反碼: 二進制碼0變1,1變0叫作反碼,反碼用於原碼補碼之間的轉換.(符號位不變) 補碼: 用來作數據的存儲運算. 補碼提出的根源是讓計算機底層的實現減法操做(能夠表達出一個數的正負) 言外之意:計算機默認只會作加法,例:5+(-3) => 5 - 3 乘法除法:是經過左移 << 和右移 >> 來實現
正數: 原碼 = 反碼 = 補碼 負數: 原碼 = 補碼取反+1 給補碼求原碼 負數: 補碼 = 原碼取反+1 給原碼求補碼 (原碼 反碼 補碼之間的轉換 , 符號位不要動)
前面提到, 計算機以二進制的形式存儲的. 而位運算說穿了, 就是直接對整數在內存中的二進制位進行操做, 不須要轉成 10 進制, 所以處理速度比較快.函數
x ^ 0 = x x ^ 1s = ~x # 1s 是二進制位所有位 1 的數, 下同 x ^ (~x) = 1s x ^ x = 0 # 若是 a ^ b = c, 那麼 a^c = b, b^c = a 成立, 交換律 a ^ b = c # ==> a^c = b, b^c = a # 結合律 a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c
# 判斷奇偶, 至關於 (x % 2) == 1 x & 1 == 1 or == 0
# x 清零最低位的 1 x = x & (x - 1)
# 獲得最低爲的 1 x & -x
# 1. 將 x 最右邊的 n 位 清零 x & (~0 << n)
# 2. 獲取 x 的第 n 位值 (0 或 1) (x >> n) & 1
# 3. 獲取 x 的第 n 位的冪值 x & (1 << (n - 1))
# 4. 僅將第 n 位置爲 1 x | (1 << n)
# 5. 僅將第 n 位置爲 0 x & (~(1 << n))
# 6. 將 x 最高位至第 n 位(含)清 0 x & ((1 << n) - 1)
# 7. 將第 n 位至第 0 位(含)位清 0 x & (~((1 << (n + 1)) - 1))