源碼、反碼、補碼詳解

本文基礎知識大部分來自於大學學習的 計算機組成原理,計算機科學技術導論等教材

引論

編程語言中,多數都會由byte類型,那byte類型是一個什麼樣的概念呢,佔用位元組數為1,為什麼值範圍是-128~127呢,帶著這樣的疑問我們進入話題

十進位數  97 和-97對應的二進位 1100001 和 -1100001

在數學中,是將正號“十”和負號“一”放在絕對值前面來表示該數是正數還是負數的。而在計算機中則使用符號位來表示正、負數。符號位規定放在數的最前面,並用“0”表示正數,用“1”表示負數。這樣,數的符號也數碼化了。在計算機中,負數有三種表示方法:原碼、反碼和補碼。任何正數的原碼、補碼和反碼的形式完全相同,而負數則有各種不同的表示形式。為區分起見,將原來用一般形式表示的數X稱為機器數的真值,而將數在計算機內的各種編碼表示稱為機器數,根據表示方法的不同分別記為[X]原、[X]反和[X]補等

在由日常數據轉換為計算機硬體能夠直接識別、處理的機器數時,需要解決三個問題

1. 只能採用二進位數,每位數碼非0即1;

2. 將符號位數字化,如用0表示正號,用1表示負號;

3. 採用什麼編碼方法表示數值。

一、原碼、補碼、反碼

原碼

原碼錶示法約定:讓數碼序列的最高位為符號位,符號位為0表示該數為正,為1表示該數為負;數碼序列的其餘部分為有效數值,用二進位數絕對值表示。

97對應的 原碼:0 1100001   -97對應的原碼:1 1100001 

反碼

正數的反碼是其本身(等於原碼);負數的反碼是將原碼中除符號位以外的所有位(數值位)取反,也就是 0 變成 1,1 變成 0

97 的 原碼和反碼都是:0 1100001   

-97 的原碼:1 1100001 

-97 的反碼:1 0011110

補碼

假設 我們用原碼進行加減法操作,示例 十進位 -2  對應二進位 1 0000010,十進位 3  對應二進位 0 0000011,正數之間是不會有問題的,但負數相加就會出現一些問題

源碼、反碼、補碼詳解

 為了克服原碼錶示法在加、減運算中的缺點,引入了補碼錶示法,並以此作為加、減運算的基礎。引入補碼錶示法的目的是:讓符號位也作為數值的一部分直接參与運算,以簡化加、減運算的規則,同時又能化減為加。下面舉個例子說明補碼的思想:

如 時鐘。時鐘以12為一個計數循環,在有模運算中稱為“以12為模”。13點捨去模12後,就是1點。從0點位置出發,沿反時針方向將時針撥動-1格(即-1點),等同於沿順時針方向撥動11格(即11點)。換句話說,在以12為模的前提下,-1可以映射為+11。由此我們得到啟發:在有模運算中,一個負數可以用一個與它互為補碼的正數來代替。

補碼示例

源碼、反碼、補碼詳解

註:數的原碼錶示形式簡單,適合於進行乘除運算,但用原碼錶示的數進行加減運算比較複雜。引入補碼以後,減法運算可以使用加法來實現,且數的符號位也可以當作運算值一樣參加運算,因此在計算機中大都採用補碼來進行加減運算。

 二、Byte結構

在絕大多數語言中 Byte結構都是 1位元組 範圍 [-128,127]

這個參考上文講的 機器數 是計算機里存儲的,計算機可以識別的數,所以 Byte 1位元組是8位,可以表示的範圍是 0000 0000 ~ 1111 1111,注意此處存儲的是 原數值的補碼

正數部分:正數的補碼還是自己,即 0000 0000 ~ 0111 1111 表示範圍是 [0,127] , 

負數部分:負數的補碼 是該數的原碼除負號位外各位取反,然後在最後一位加1,

即 1111 1111 ~ 1000 0000 對應的原值 0000 0000 ~ 1000 0001  即為 [-128,-1]

注意:其實有的時候很難理解 把 1000 0000 轉換為 -128,這個原因是 高位被截斷,其實他的原碼應該是 1 0000 0000 然後取補碼得到 1000 0000

 以下為Java代碼示例

源碼、反碼、補碼詳解

到此這篇關於計算機組成原理之源碼、反碼、補碼詳解及Byte結構的文章就介紹到這了,更多相關源碼、反碼、補碼詳解內容請搜索以前的文章或繼續瀏覽下面的相關文章,希望大家以後多多支持!

原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/172243.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-11-22 04:08
下一篇 2024-11-22 04:08

相關推薦

  • 雲智直聘 源碼分析

    本文將會對雲智直聘的源碼進行分析,包括前端頁面和後端代碼,幫助讀者了解其架構、技術實現以及對一些常見的問題進行解決。通過本文的閱讀,讀者將會了解到雲智直聘的特點、優勢以及不足之處,…

    編程 2025-04-29
  • 二進位補碼轉化為十進位原碼

    二進位補碼與原碼轉化是數字計算中必不可少的環節。本文將從多個方面對二進位補碼轉化為十進位原碼進行詳細闡述。 一、計算方法 計算二進位補碼轉化為十進位原碼,我們需要先將二進位補碼轉化…

    編程 2025-04-29
  • Python網站源碼解析

    本文將從多個方面對Python網站源碼進行詳細解析,包括搭建網站、數據處理、安全性等內容。 一、搭建網站 Python是一種高級編程語言,適用於多種領域。它也可以用於搭建網站。最常…

    編程 2025-04-28
  • 源碼是什麼

    源碼是一段計算機程序的原始代碼,它是程序員所編寫的可讀性高、理解性強的文本。在計算機中,源碼是指編寫的程序代碼,這些代碼按照一定規則排列,被計算機識別並執行。 一、源碼的組成 源碼…

    編程 2025-04-27
  • Go源碼閱讀

    Go語言是Google推出的一門靜態類型、編譯型、並髮型、語法簡單的編程語言。它因具有簡潔高效,內置GC等優秀特性,被越來越多的開發者所鍾愛。在這篇文章中,我們將介紹如何從多個方面…

    編程 2025-04-27
  • Python怎麼看源碼

    本文將從以下幾個方面詳細介紹Python如何看源碼,幫助讀者更好地了解Python。 一、查看Python版本 在查看Python源碼之前,首先需要確認Python版本。可以在命令…

    編程 2025-04-27
  • 源碼審計面試題用法介紹

    在進行源碼審計面試時,可能會遇到各種類型的問題,本文將以實例為基礎,從多個方面對源碼審計面試題進行詳細闡述。 一、SQL注入 SQL注入是常見的一種攻擊方式,攻擊者通過在輸入的參數…

    編程 2025-04-27
  • 原碼、反碼、補碼的轉換

    一、什麼是原碼、反碼和補碼 在計算機中,二進位是運算的基礎,而原碼、反碼和補碼則是二進位運算中的概念。原碼是一種基礎的表示方法,它的最高位為符號位,其他位表示數值。反碼則是在原碼基…

    編程 2025-04-24
  • 對3ue源碼的多方面闡述

    一、3ue源碼簡述 3ue是一款基於Vue.js開發的富文本編輯器,支持圖片上傳、粘貼、表格、代碼塊等多種功能,具有輕量、可定製、易擴展的特點。下面我們將從多個方面對3ue源碼進行…

    編程 2025-04-22
  • 全面解析ptable:從使用到源碼分析

    ptable是一個輕量級的DOM操作插件,主要用於表格的操作和功能增強。它的使用非常靈活,支持多種操作方式,包括添加、刪除、修改、排序、篩選等,可以大大提高表格的效率和易用性。 一…

    編程 2025-04-22

發表回復

登錄後才能評論