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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

計(jì)算機(jī)為什么使用補(bǔ)碼的形式來(lái)表示負(fù)數(shù)

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

計(jì)算機(jī)有三種編碼方式來(lái)表示同一個(gè)數(shù):

原碼:符號(hào)位加上真值的絕對(duì)值,第一位表示符號(hào),其余位表示值。

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

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

對(duì)于+1和-1,

[+1] = [0001]原 = [0001]反 = [0001]補(bǔ)

[-1] = [1001]原 = [1110]反 = [1111]補(bǔ)

為什么計(jì)算機(jī)采用補(bǔ)碼的形式來(lái)表示負(fù)數(shù)呢?

首先我們知道,一個(gè)數(shù)在計(jì)算機(jī)中有正負(fù)之分,這個(gè)數(shù)的最高位(符號(hào)位)用來(lái)表示它的正負(fù),其中0表示正數(shù),1表示負(fù)數(shù)。

對(duì)于計(jì)算機(jī)來(lái)說(shuō),加法是最基礎(chǔ)的運(yùn)算,要設(shè)計(jì)的盡量簡(jiǎn)單。

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

如果能將符號(hào)位也參與到運(yùn)算中,而非單獨(dú)“辨識(shí)符號(hào)位”,就可以大大簡(jiǎn)化計(jì)算機(jī)的基礎(chǔ)電路。

于是,人們開(kāi)始探索只保留加法,并將符號(hào)位參與到運(yùn)算中的方法。

1、原碼:1 - 1 = 0

首先來(lái)看原碼:1 - 1 = 0

1 - 1 = 1 + (-1)

= [0001]原 + [1001]原

= [1002]原

= -2

這顯然是錯(cuò)誤的。

2、反碼:1 - 1 = 0

對(duì)于反碼:

1 - 1 = 1 + (-1)

= [0001]反 + [1110]反

= [1111]反

= [1000]原

= -0

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

-0([1000])

+0([0000])

而0帶符號(hào)是沒(méi)有意義的。

且采用補(bǔ)碼形式,對(duì)于4位的二進(jìn)制,其表達(dá)的范圍為:[1000]反~[0111]反,即[1111]原~[0111]原,也即[-7,7]。

因?yàn)椤?”有兩個(gè)編碼形式,所以等于浪費(fèi)了一個(gè)編碼。

3、補(bǔ)碼:1 - 1 = 0

而補(bǔ)碼解決了反碼的問(wèn)題:

1 - 1 = 1 + (-1)

= [0001]補(bǔ) + [1111]補(bǔ)

= [0000]補(bǔ)

= [0000]原

= 0

使用補(bǔ)碼, 不僅僅解決了0的符號(hào)以及存在兩個(gè)編碼的問(wèn)題,而且還能夠用[1000]來(lái)表示-8,即多表示一個(gè)最低數(shù)。

即對(duì)于4位的二進(jìn)制,使用原碼或反碼表示的范圍為[-7,+7],而使用補(bǔ)碼表示的范圍為[-8,7]。

因?yàn)橛?jì)算機(jī)采用補(bǔ)碼來(lái)表示負(fù)數(shù),所以對(duì)于編程中常用到的32位int類(lèi)型,可以表示范圍是:[-2^31,2^31-1] 。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 二進(jìn)制
    +關(guān)注

    關(guān)注

    2

    文章

    761

    瀏覽量

    41476
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7174

    瀏覽量

    87159
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    915

    瀏覽量

    54651
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    計(jì)算機(jī)中原碼,反碼,補(bǔ)碼之間的關(guān)系

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

    原碼反碼補(bǔ)碼的詳細(xì)理解

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

    補(bǔ)碼是什么 補(bǔ)碼和原碼的轉(zhuǎn)化

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

    單片機(jī)的重要功能/組成

    的數(shù)均用補(bǔ)碼表示(正數(shù)因形式一致,可認(rèn)為即用原碼表示),運(yùn)算結(jié)果也是補(bǔ)碼.2. 微型計(jì)算機(jī)原理馮諾依曼結(jié)構(gòu):
    發(fā)表于 11-18 08:49

    計(jì)算機(jī)的原碼與反碼及其補(bǔ)碼是干啥的?

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

    補(bǔ)碼加法,補(bǔ)碼加法計(jì)算原理

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

    深入探求反碼和補(bǔ)碼

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

    關(guān)于二進(jìn)制表示補(bǔ)碼計(jì)算的來(lái)龍去脈

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

    計(jì)算機(jī)為什么要使用補(bǔ)碼

    ,增加了計(jì)算的時(shí)間,能不能用加法器實(shí)現(xiàn)減法器的功能?這個(gè)實(shí)現(xiàn)的過(guò)程就用到了補(bǔ)碼。 計(jì)算機(jī)為什么使用補(bǔ)碼?采用補(bǔ)碼可以簡(jiǎn)化
    的頭像 發(fā)表于 09-12 16:06 ?7349次閱讀

    計(jì)算機(jī)中的負(fù)數(shù)要用補(bǔ)碼來(lái)表示?

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

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

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

    FPGA有符號(hào)數(shù),定點(diǎn)小數(shù)表示計(jì)算機(jī)數(shù)值表示規(guī)則

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

    計(jì)算機(jī)原碼、反碼、補(bǔ)碼的概念

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

    計(jì)算機(jī)為什么利用反碼來(lái)實(shí)現(xiàn)減法?

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

    二進(jìn)制補(bǔ)碼及與原碼的互相轉(zhuǎn)換方法

    表示負(fù)數(shù)。其余位表示數(shù)值的大小。 二進(jìn)制補(bǔ)碼?是一種用于表示有符號(hào)整數(shù)的二進(jìn)制編碼方式,常用于?計(jì)算機(jī)
    的頭像 發(fā)表于 09-19 22:25 ?37次閱讀