二進位快速補碼轉換的快捷方式

我們將看到一個簡化從負到正的轉換的快捷方式,它用於二進制快速補碼轉換,是一個非常方便的操作。

二進制快速補碼轉換的快捷方式

就像對無符號數字的操作一樣,可以溢出硬件來表示結果的能力,因此可以在兩個補碼上進行操作。溢出發生在最左邊的保留位的二進制位模式是不一樣的無限數量的數字(符號位不正確):0左邊的位模式時數量是負數或1數量是正的。

簽名與無符號的應用既適用於負載,也適用於算術。

二進制快速補碼轉換的快捷方式

簽名負載的功能是重複複製符號以填充寄存器的其餘部分——稱為符號擴展——但其目的是在寄存器內正確地表示數字。無符號加載只需在數據的左邊填上操作系統,因為位模式所表示的數字是無符號的。

當將一個64位的雙字加載到64位寄存器中時,這個點是沒有實際意義的;簽名和無符號加載是相同的。RISC-V確實提供了兩種類型的字節負載:加載字節無符號(lbu)將字節視為無符號數,因此零擴展以填充寄存器的最左邊部分,而load字節(lb)則與簽名整數一起工作。由於C程序幾乎總是使用字節來表示字符,而不是將字節看作是非常短的符號整數,所以lbu實際上只用於字節負載。

二進制快速補碼轉換的快捷方式

與上面討論的簽名數字不同,內存地址自然從0開始,並繼續到最大的地址。換句話說,負面地址毫無意義。因此,程序有時需要處理一些可以是正的或負的數字,有時也要處理一些只能是正數的數字。一些編程語言反映了這種區別。例如,將前整數和後一個無符號整數(無符號長整數)命名。一些C風格的指南甚至建議將前者聲明為長時間的長整數,以保持清晰的區別。

在處理兩個補碼時,讓我們檢查兩個有用的快捷方式。第一個快捷方式是一種快速的方法來否定兩個補碼的二進制數。簡單地將每一個0到1和1到0,然後在結果中添加一個。這個快捷方式是基於這樣的觀察:一個數字的和它的反向表示必須是111。Hltwo代表1。因為x+x-所以jc+x+l=orjc+l x。(我們用這個符號來表示x從0到1的每一點,反之亦然。)

二進制快速補碼轉換的快捷方式

我們的下一個快捷方式告訴我們如何將用n位表示的二進制數轉換成以多於n位表示的數字。捷徑就是從較小的數量——符號位——取最重要的位,然後複製它來填充更大數量的新位。舊的非符號位被簡單地複製到新的雙字的正確部分。這個快捷方式通常稱為符號擴展。


分享到:


相關文章: