回覆列表
  • 1 # 使用者982804153805

    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表示“負”,而數值位,三種表示方法各不相同。在計算機系統中,數值一律用補碼來表示和儲存。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。此外,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬體電路。

  • 中秋節和大豐收的關聯?
  • 玫瑰都有什麼顏色?