回覆列表
-
1 # 使用者977159618740
-
2 # 滴逃逃
-85負就是1,然後計算正85:+85的原碼(1010101)→按位取反(0101010)→加1(0101011)
10101011(2)負數的補碼:符號位為1,其餘位為該數絕對值的原碼按位取反;然後整個數加1。
【例2】求-7的補碼。
因為給定數是負數,則符號位為“1”。
後七位:+7的原碼(0000111)→按位取反(1111000)→加1(1111001)
所以-7的補碼是11111001。
1、正數的補碼錶示:正數的補碼=原碼負數的補碼={原碼符號位不變}+{數值位按位取反後+1} or={原碼符號位不變}+{數值位從右邊數第一個1及其右邊的0保持不變,左邊安位取反}以十進位制整數+97和-97為例:+97原碼=0110_0001b+97補碼=0110_0001b-97原碼 =1110_0001b-97補碼 =1001_1111b2、純小數的原碼:純小數的原碼如何得到呢?方法有很多,在這裡提供一種較為便於筆算的方法。以0.64為例,透過查閱可知其原碼為0.1010_0011_1101_0111b。操作方法:將0.64*2^n得到X,其中n為預保留的小數點後位數(即認為n為小數之後的小數不重要),X為乘法結果的整數部分。此處將n取16,得X=41943d=1010_0011_1101_0111b即0.64的二進位制表示在左移了16位後為1010_0011_1101_0111b,因此可以認為0.64d= 0.1010_0011_1101_0111b與查詢結果一致。再實驗n取12,得X=2621d=1010_0011_1101b即 0.64d= 0.1010_0011_1101b,在忽略12位小數之後的位數情況下,計算結果相同。3、純小數的補碼:純小數的補碼遵循的規則是:在得到小數的原始碼後,小數點前1位表示符號,從最低(右)位起,找到第一個“1”照寫,之後“見1寫0,見0寫1”。以-0.64為例,其原碼為1.1010_0011_1101_0111b則補碼為:1.0101_1100_0010_1001b當然在硬體語言如verilog中二進位制表示時不可能帶有小數點(事實上不知道哪裡可以帶小數點)。4、一般帶小數的補碼一般來說這種情況下先轉為整數運算比較方便-97.64為例,經查詢其原碼為1110_0001.1010_0011_1101_0111b筆算過程:-97.64*2^16=-6398935= 1110_0001_1010_0011_1101_0111b,其中小數點在右數第16位,與查詢結果一致。則其補碼為1001_1110_0101_1100_0010_1001b,在此採用 負數的補碼={原碼符號位不變}+{數值位按位取反後+1} 方法5、補碼得到原碼:方法:符號位不動,幅度值取反+1 or符號位不動,幅度值-1取反-97.64補碼= 1001_1110(.)0101_1100_0010_1001b取反 = 1110_0001(.)1010_0011_1101_0110b+1 = 1110_0001(.)1010_0011_1101_0111b與查詢結果一致6、補碼的拓展:在運算時必要時要對二進位制補碼進行數位拓展,此時應將符號位向前拓展。-5補碼=4"b1011=6"b11_1011ps.原碼的拓展是將符號位提到最前面,然後在拓展位上部0.-5原碼=4‘b’1101=6"b10_0101,對其求補碼得6"b11_1011,與上文一致。擴充套件資料:計算機中的符號數有三種表示方法,即原碼、反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示“正”,用1表示“負”,而數值位,三種表示方法各不相同。在計算機系統中,數值一律用補碼來表示和儲存。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。此外,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬體電路。