資料運算 各種碼的運算

2021-10-10 09:01:10 字數 2154 閱讀 2671

計算機中,數的存放形式都是n位二進位制數,為了區分正負性,往往把第一位空下來作為符號位,此種數就是有符號數。若在特定的應用中不需要負數,那麼符號位自然就沒有必要,此時二進位制的每一位都是有效位,此種數就是無符號數

通常對有符號數來說,0表示正,1表示負,第一位表示符號位,其餘為數值位,二進位制數=符號位+數值位。若採用3位二進位制數表示數時,對無符號數101表示5001表示1;對有符號數來說,101表示-1,,001表示+1

如果計算機中考慮小數表示的話,就需要確定小數點的問題,即小數點該如何表示。一般規定某一位之前為整數部分,之後為小數部分,由此解決小數點問題。

對n位二進位制數,如果小數點位置固定不變,就稱為定點數;如果小數點位置根據二進位制內容浮動的,就稱為浮點數

計算機中,為了實現整數和小數的加減乘除,需要引入四種碼:原碼反碼補碼移碼,其中補碼是運算的核心,運算原理的支撐是數學邏輯。

對於原碼,第一位為符號位,0表示正,1表示負,其餘部分為數值位。對於小數,只考慮絕對值小於1的小數表示。對絕對值大於或等於1的小數,用整數+小數組合即可,後續會有更詳細的ieee標準介紹組合表示方法。

考慮採用n位無符號二進位制數表示非負整數非負小數

如果在無符號數前面加上符號位,即可表示一定範圍的小數和整數,這對於計算機的數值運算已經足夠了,對於整數的範圍和小數的精度,無非就是二進位制數採用多少位的問題。

需要注意的是,0在原碼中有兩種表示方法,一種是符號位為1,數值位表示0;另外一種是符號位為0,數值位表示0,如000與100均表示0.

反碼通常是原碼計算補碼或者補碼計算原碼的過程中,用於中間過渡的碼,其存在只是為了更方便理解和表達。

反碼的符號位與原碼一致,數值位進行如下變換:對於正數,數值位不變;對於負數,數值位按位取反。注意,此規則並沒有區分是整數還是小數,兩者規則是一致的。

補碼很重要,是計算機進行四則運算的基礎,更是計算機中體現數學邏輯與設計巧妙的地方。可以說,沒有它,就沒有今天看到的計算機,計算機的發展也就無處可談。

補碼的符號位與反碼一致,數值位進行如下變換:對於正數,數值位不變;對於負數,數值位最後1位+1,注意考慮進製情況。

仔細分析計算過程,第一道減法題只是按位運算,而第二道減法題涉及借位運算

在電路設計中,按位直接運算的實現邏輯很簡單,但是如果涉及借位,電路將十分複雜,且不一定高效實用,故需要找到一種方法,讓電路避免進行進製計算。

對第二道計算題,可以採用這種方法:32-28=(99+32)-(28+100-1),注意到99=100-1,表示式換了之後結果不變,但是有趣的事情發生了!

(99+32)-(28+100-1)=(99-28)+(32+1)-100=104-100=4

99-28沒有借位,104-100也沒有借位,問題解決!

那麼這和二進位制補碼有什麼關係呢?看下面n位無符號二進位制數的運算過程即可明白!

移碼可以用來直接比較大小,演算法即為補碼的符號位+1即可,用於浮點數的階碼(後續介紹)。

python set的各種運算

python的set和其他語言類似,是乙個無序不重複元素集,基本功能包括關係測試和消除重複元素.集合物件還支援union 聯合 intersection 交 difference 差 和sysmmetric difference 對稱差集 等數 算.sets 支援 x in set,len set ...

收集的各種位運算

由樹狀陣列得到的位運算 lowbit x 用於獲得數x在二進位制形式下的最低位的1,比如12的二進位制是1100,lowbit 12 4。lowbit x x x x 1 x x 下面是 之美 裡面用於統計數二進位制下有多少個1的各種 從最基本的,數都在32位內。ans 0 for int i 0 ...

廣義表的各種運算

題目要求 編寫乙個程式exp6 5.cpp,實現廣義表的各種運算,並在此基礎上設計乙個主程式完成如下功能 1.建立廣義表g b,b,a,d a,b c,的鏈式儲存結構 2.輸出廣義表g的長度 3.輸出廣義表g的深度 4.輸出廣義表g的最大原子。輸入 include include includeus...