0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

計算機為什么使用補碼的形式來表示負數(shù)

Wildesbeast ? 來源:今日頭條 ? 作者:算法集市 ? 2020-02-12 15:28 ? 次閱讀

計算機有三種編碼方式來表示同一個數(shù):

原碼:符號位加上真值的絕對值,第一位表示符號,其余位表示值。

反碼:正數(shù)的反碼是其本身;負數(shù)的反碼是在其原碼的基礎上,符號位不變,其余位取反。

補碼:正數(shù)的補碼還是其本身;負數(shù)的補碼是在其原碼的基礎上,符號位保持不變,其余位取反,最后+1。即反碼加1。

對于+1和-1,

[+1] = [0001]原 = [0001]反 = [0001]補

[-1] = [1001]原 = [1110]反 = [1111]補

為什么計算機采用補碼的形式來表示負數(shù)呢?

首先我們知道,一個數(shù)在計算機中有正負之分,這個數(shù)的最高位(符號位)用來表示它的正負,其中0表示正數(shù),1表示負數(shù)。

對于計算機來說,加法是最基礎的運算,要設計的盡量簡單。

根據(jù)加法的運算法則,a-b等于a+(-b)。

如果能將符號位也參與到運算中,而非單獨“辨識符號位”,就可以大大簡化計算機的基礎電路。

于是,人們開始探索只保留加法,并將符號位參與到運算中的方法。

1、原碼:1 - 1 = 0

首先來看原碼:1 - 1 = 0

1 - 1 = 1 + (-1)

= [0001]原 + [1001]原

= [1002]原

= -2

這顯然是錯誤的。

2、反碼:1 - 1 = 0

對于反碼:

1 - 1 = 1 + (-1)

= [0001]反 + [1110]反

= [1111]反

= [1000]原

= -0

用反碼進行計算,發(fā)現(xiàn)結果是對的。但有一個問題是“0”的表示有兩個:

-0([1000])

+0([0000])

而0帶符號是沒有意義的。

且采用補碼形式,對于4位的二進制,其表達的范圍為:[1000]反~[0111]反,即[1111]原~[0111]原,也即[-7,7]。

因為“0”有兩個編碼形式,所以等于浪費了一個編碼。

3、補碼:1 - 1 = 0

而補碼解決了反碼的問題:

1 - 1 = 1 + (-1)

= [0001]補 + [1111]補

= [0000]補

= [0000]原

= 0

使用補碼, 不僅僅解決了0的符號以及存在兩個編碼的問題,而且還能夠用[1000]來表示-8,即多表示一個最低數(shù)。

即對于4位的二進制,使用原碼或反碼表示的范圍為[-7,+7],而使用補碼表示的范圍為[-8,7]。

因為計算機采用補碼來表示負數(shù),所以對于編程中常用到的32位int類型,可以表示范圍是:[-2^31,2^31-1] 。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 二進制
    +關注

    關注

    2

    文章

    803

    瀏覽量

    41994
  • 計算機
    +關注

    關注

    19

    文章

    7594

    瀏覽量

    89592
  • 編碼
    +關注

    關注

    6

    文章

    962

    瀏覽量

    55237
收藏 0人收藏

    評論

    相關推薦

    原創(chuàng):labview 讀取補碼表示的有符號16位數(shù)時,如何解析成負數(shù)

    二進制表示的,負值用二進制表示時,是以補碼形式表示。 (正數(shù)的補碼是其本身,
    發(fā)表于 02-21 22:12

    計算機中原碼,反碼,補碼之間的關系

    首先提幾個概念: 原碼,反碼,補碼     原碼是什么?      原碼就是早期用來表示數(shù)字的一種方式: 一個正數(shù),轉換為二進制位就是這個正數(shù)的原碼。負數(shù)的絕對值轉換成二進制位然后在高位補1就是這個
    發(fā)表于 09-17 10:00

    原碼反碼補碼的詳細理解

    `一. 機器數(shù)和真值在學習原碼, 反碼和補碼之前, 需要先了解機器數(shù)和真值的概念.1、機器數(shù)一個數(shù)在計算機中的二進制表示形式,叫做這個數(shù)的機器數(shù)。機器數(shù)是帶符號的,在
    發(fā)表于 11-16 15:32

    補碼是什么 補碼和原碼的轉化

    計算機中的有符號數(shù)有三種表示方法,即原碼、反碼和補碼。三種表示方法均有符號位和數(shù)值位兩部分,符號位都是用0表示“正”,用1
    發(fā)表于 12-11 17:45

    單片機的重要功能/組成

    的數(shù)均用補碼表示(正數(shù)因形式一致,可認為即用原碼表示),運算結果也是補碼.2. 微型計算機原理馮諾依曼結構:
    發(fā)表于 11-18 08:49

    計算機的原碼與反碼及其補碼是干啥的?

    ?! ?b class='flag-5'>計算機存儲數(shù)據(jù)使用補碼而不是直接用二進制,因為二進制不能表示負數(shù)?! ≡a雖然能表示負數(shù),
    發(fā)表于 04-13 17:04

    補碼加法,補碼加法計算原理

    補碼加法,補碼加法計算原理    負數(shù)補碼表示后,可以和正數(shù)一樣來處理。這樣,運算器里只需要一個加法器就可以了,不必為了
    發(fā)表于 04-13 11:41 ?1.9w次閱讀

    深入探求反碼和補碼

    ! 希望本文對大家學習計算機基礎有所幫助! 一、機器數(shù)和真值 在學習原碼, 反碼和補碼之前, 需要先了解機器數(shù)和真值的概念。 1、機器數(shù) 一個數(shù)在計算機中的二進制表示
    的頭像 發(fā)表于 09-15 15:23 ?1423次閱讀

    關于二進制表示補碼計算的來龍去脈

    既簡單、又強大的數(shù)字。但是大部分人,對于二進制、二進制計算、原碼、反碼以及補碼的認識,仍處于機械的強制記憶階段。尤其是對一些編碼和計算,仍然處于模糊的認識階段,例如: CPU 是如何表示
    的頭像 發(fā)表于 06-07 14:30 ?2718次閱讀

    計算機為什么要使用補碼

    ,增加了計算的時間,能不能用加法器實現(xiàn)減法器的功能?這個實現(xiàn)的過程就用到了補碼。 計算機為什么使用補碼?采用補碼可以簡化
    的頭像 發(fā)表于 09-12 16:06 ?7962次閱讀

    計算機中的負數(shù)要用補碼表示?

    一個數(shù)在計算中的二進制表示形式,叫做這個數(shù)的機器數(shù),機器數(shù)是帶符號的,正數(shù)為0,負數(shù)為1。
    的頭像 發(fā)表于 03-30 09:59 ?3349次閱讀
    <b class='flag-5'>計算機</b>中的<b class='flag-5'>負數(shù)</b>要用<b class='flag-5'>補碼</b><b class='flag-5'>來</b><b class='flag-5'>表示</b>?

    計算機組成原理——數(shù)值型數(shù)據(jù)的表示

    計算機中,無論是何種形式的數(shù)據(jù)均采用數(shù)字化形式表示,即用“0”、“1”兩個基本符號構成的編碼表示,以便采用數(shù)字電路實現(xiàn)其存儲與處理。
    的頭像 發(fā)表于 05-25 16:05 ?5834次閱讀
    <b class='flag-5'>計算機</b>組成原理——數(shù)值型數(shù)據(jù)的<b class='flag-5'>表示</b>

    FPGA有符號數(shù),定點小數(shù)表示計算機數(shù)值表示規(guī)則

    計算機體系中,計算機并不認識負數(shù),那么計算機是如何表示負數(shù)呢?
    發(fā)表于 06-16 15:34 ?2727次閱讀
    FPGA有符號數(shù),定點小數(shù)<b class='flag-5'>表示</b>及<b class='flag-5'>計算機</b>數(shù)值<b class='flag-5'>表示</b>規(guī)則

    計算機原碼、反碼、補碼的概念

    計算機內部數(shù)值是以補碼的方式進行存儲的,采用補碼進行數(shù)據(jù)存儲當然有其優(yōu)點,下面會一一介紹相關內容,讓各位徹底弄懂原碼、反碼、補碼的概念以及為什么采用
    的頭像 發(fā)表于 01-09 12:25 ?5044次閱讀
    <b class='flag-5'>計算機</b>原碼、反碼、<b class='flag-5'>補碼</b>的概念

    計算機為什么利用反碼實現(xiàn)減法?

    元器件的限制。當時,計算機的電路設計主要采用位操作(二進制)實現(xiàn)。為了能夠有效地表示負數(shù),人們引入了反碼的概念。使用反碼可以使計算機系統(tǒng)在
    的頭像 發(fā)表于 02-19 15:10 ?1212次閱讀

    電子發(fā)燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品