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

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

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

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

jf_78858299 ? 來源:小余的自習(xí)室 ? 作者:小余的自習(xí)室 ? 2023-03-30 09:59 ? 次閱讀

機(jī)器數(shù)和真值

機(jī)器數(shù)

一個(gè)數(shù)在計(jì)算中的二進(jìn)制表示形式,叫做這個(gè)數(shù)的機(jī)器數(shù),機(jī)器數(shù)是帶符號(hào)的,正數(shù)為0,負(fù)數(shù)為1。

如 :

  • 十進(jìn)制數(shù)+3,機(jī)器數(shù)就是00000000000000000000000000000011
  • 十進(jìn)制數(shù)-3,那機(jī)器數(shù)不就是10000000000000000000000000000011 ,想當(dāng)然~ 實(shí)際是11111111111111111111111111111101,這個(gè)數(shù)是-3的補(bǔ)碼形式,因?yàn)?strong>負(fù)數(shù)在機(jī)器中是以補(bǔ)碼的形式存在的。

真值

真正數(shù)學(xué)意義上的數(shù)值。因?yàn)榈谝晃皇欠?hào)位,所以機(jī)器數(shù)形式值就不等于真正的數(shù)值。 如:

00000000000000000000000000000011->+3
11111111111111111111111111111101->-3

當(dāng)然前面的舉例是針對(duì)有符號(hào)數(shù)來說的,對(duì)于無符號(hào)數(shù),機(jī)器數(shù)和真值是一致的。

無符號(hào)數(shù)和有符號(hào)數(shù)機(jī)器數(shù)和真值換算方式

無符號(hào)數(shù)換算:

用一個(gè)函數(shù) B2Uw (Binary to Unsigned)的縮寫,長(zhǎng)度為w來表示:

圖片

如4位二進(jìn)制數(shù):

圖片

圖片

圖片

圖片

有符號(hào)數(shù)換算方式

前面我們說過有符號(hào)數(shù)在計(jì)算機(jī)中的機(jī)器數(shù)是以補(bǔ)碼的形式存在的,其換算公式 B2Tw (Binary to Two`s complement):

圖片

如下面4位二進(jìn)制數(shù):

圖片

圖片

圖片

圖片

當(dāng)然還有一種大眾所知的方式:就是使用原碼,反碼,補(bǔ)碼變換規(guī)律

原碼,反碼,補(bǔ)碼

計(jì)算機(jī)機(jī)器數(shù)運(yùn)行效率問題

首先要清楚我們計(jì)算機(jī)中統(tǒng)一使用的是加法計(jì)算,對(duì)你沒聽錯(cuò)。。計(jì)算機(jī)居然不會(huì)減法,哈哈。

在補(bǔ)碼概念提出之前,我們來舉幾個(gè)例子:

圖片

可以看到在有負(fù)數(shù)參與的加法計(jì)算得到的結(jié)果是有誤的。

如果需要得到正確的結(jié)果,計(jì)算器不得不是有其他方式去得到,這樣必然就會(huì)影響運(yùn)行效率。

為了解決負(fù)數(shù)在計(jì)算機(jī)中運(yùn)行效率問題,科學(xué)家們提出了補(bǔ)碼的概念。

補(bǔ)碼:

使用補(bǔ)碼獲取真值

那如何使用補(bǔ)碼規(guī)則獲取一個(gè)負(fù)數(shù)的真值呢?

圖片

假設(shè)我們從計(jì)算中獲取了一個(gè)二進(jìn)制為10000001的8位機(jī)器數(shù),如何獲取其真值。

  • step1 .首先10000001是指一個(gè)補(bǔ)碼形式機(jī)器數(shù),實(shí)際上在計(jì)算機(jī)系統(tǒng)中,所有的整數(shù)都是以補(bǔ)碼的形式存在,包括正數(shù)和負(fù)數(shù),正數(shù)的補(bǔ)碼就是原碼自己所以統(tǒng)一使用補(bǔ)碼來存儲(chǔ)。
  • step2 .按照補(bǔ)碼到反碼規(guī)則,在補(bǔ)碼10000001基礎(chǔ)上-1,將得到反碼:10000000
  • step3 .按照反碼到原碼規(guī)則,將符合位不變,反碼取反即可得原碼:11111111
  • step4 .按照原碼的真值概念:原碼的符合位為符號(hào)位,不參與計(jì)算,其他位為真值的絕對(duì)值即可:- 127

圖片

補(bǔ)碼的計(jì)算邏輯

我們回到前面分析運(yùn)行效率時(shí)舉的正正,負(fù)負(fù),正負(fù)相加例子:

這里我們使用補(bǔ)碼再來計(jì)算下:

圖片

可以看出,將符號(hào)以補(bǔ)碼的形式存儲(chǔ)在計(jì)算機(jī)中之后就可以使用加法來代替減法的操作,大大提高了計(jì)算機(jī)的運(yùn)行效率。

補(bǔ)碼的設(shè)計(jì)來源

通過文章前半部分介紹,相信你已經(jīng)對(duì)補(bǔ)碼有了一個(gè)比較全面的概念了,但是補(bǔ)碼是怎么設(shè)計(jì)出來的呢?

數(shù)學(xué)里面有一個(gè)“補(bǔ)數(shù)”概念。

補(bǔ)數(shù)

生活中有很多例子,只要是 帶周期性的事務(wù)性質(zhì)的都可以用補(bǔ)數(shù)來形容 。比如:時(shí)鐘或者轉(zhuǎn)盤等。

圖片

假設(shè)當(dāng)前時(shí)間是2點(diǎn),你要讓時(shí)鐘顯示到12點(diǎn),那么有兩個(gè)方式。

  • 方式1 .將指針順時(shí)針撥動(dòng)10個(gè)點(diǎn),做的是 加法 :+10。
  • 方式2 .將指針逆時(shí)針撥動(dòng)2個(gè)點(diǎn),做的是 減法 :-2。

對(duì)于時(shí)鐘來說,不管你是方式1的加法運(yùn)行還是方式2的減法運(yùn)算,指針都指向了12點(diǎn),實(shí)現(xiàn)的效果是一致的, 那我們就說+10和-2是兩個(gè)補(bǔ)數(shù),它們的絕對(duì)值之和12就是補(bǔ)數(shù)的模

這種規(guī)律也被應(yīng)用到計(jì)算機(jī)二進(jìn)制中 。下面我們使用一個(gè)例子來看:

假設(shè)要計(jì)算:(5)+(-1) = 5+(+?)

  • 5在計(jì)算機(jī)中的原碼: 0 0 0 0 0 1 0 1
  • -1在計(jì)算機(jī)中的原碼:1 0 0 0 0 0 0 1

要將這個(gè)減法操作變?yōu)榧臃ú僮鳎滓蝿?wù)就是找到模,然后得到-1的正補(bǔ)數(shù)相加即可 。

來看我們的時(shí)鐘,每撥動(dòng)12格為一個(gè)周期,就是說復(fù)原了,一樣的, 8bit位范圍是-128~127 ,(注意這里我們?yōu)榱司?jiǎn)分析使用的是8位來測(cè)試計(jì)算,實(shí)際計(jì)算機(jī)中場(chǎng)景一般都是32位格式4個(gè)字節(jié)或者64位計(jì)算)所以 其一個(gè)周期就是256,也就是其模就是256 (1 0000 0000),不管你是加上256還是減少256,在二進(jìn)制中,值都是不變的,因?yàn)樽詈笠晃皇且绯鑫?,不?huì)去計(jì)算。

通過以上分析我們找到了-1(1 0 0 0 0 0 0 1)的模為256(1 0000 0000),-1的補(bǔ)數(shù)為(+255):0 1111 1111

這樣就將5-1這個(gè)減法運(yùn)算變更為了5+255這個(gè)加法操作

下面我們來看5+255:

5:0000 0101

255:0 1111 1111 

二進(jìn)制相加后:1 0000 0100 ->最高位溢出丟棄所以結(jié)果為4.

看到是不是和5-1結(jié)果一樣呢?。

其實(shí)計(jì)算機(jī)中的補(bǔ)碼也是這個(gè)模式: 找到一個(gè)與負(fù)數(shù)等價(jià)的正補(bǔ)數(shù),使用該正補(bǔ)數(shù)代替負(fù)數(shù),從而將減法運(yùn)算替換為兩個(gè)正數(shù)加法運(yùn)算 ,補(bǔ)碼的出現(xiàn)與運(yùn)算器的電路設(shè)計(jì)有關(guān),從設(shè)計(jì)者的角度看,希望盡可能簡(jiǎn)化電路設(shè)計(jì)和計(jì)算復(fù)雜度。而使用正補(bǔ)數(shù)代替負(fù)數(shù)就可以消除減法器,實(shí)現(xiàn)簡(jiǎn)化電路的目的。

我們下期見。

參考:為什么計(jì)算機(jī)中的負(fù)數(shù)要用補(bǔ)碼表示?

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

    關(guān)注

    2

    文章

    795

    瀏覽量

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

    關(guān)注

    19

    文章

    7508

    瀏覽量

    88078
  • 十進(jìn)制
    +關(guān)注

    關(guān)注

    0

    文章

    67

    瀏覽量

    13228
  • 補(bǔ)碼
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    7559
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    首先提幾個(gè)概念: 原碼,反碼,補(bǔ)碼     原碼是什么?      原碼就是早期用來表示數(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ǔ)碼是什么 補(bǔ)碼和原碼的轉(zhuǎn)化

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

    計(jì)算機(jī)中不同硬件對(duì)Hz的定義相同嗎

    Hz(赫茲)通常的定義是波形每秒鐘變化或振動(dòng)的次數(shù),在計(jì)算機(jī)中不同硬件對(duì)Hz的定義各不相同。CPU:Hz用來表示時(shí)鐘頻率。目前的CPU通常以MHz和GHz作為計(jì)量單位。顯示器:在顯示器中有三個(gè)頻率
    發(fā)表于 09-08 06:10

    微型計(jì)算機(jī)中采用的邏輯元件是什么

    第7部分 計(jì)算機(jī)硬件 單選(1) .[B]計(jì)算機(jī)向使用者傳送計(jì)算、處理結(jié)果的設(shè)備稱為______。(A) 輸入設(shè)備(B) 輸出設(shè)備(C) 存儲(chǔ)設(shè)備(D) 微處理器(2) .[C]目前微型計(jì)算機(jī)
    發(fā)表于 09-15 07:43

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

    1. 數(shù)制為更好描述和記憶微型計(jì)算機(jī)的地址,代碼一般采用十六進(jìn)制.原碼,反碼和補(bǔ)碼正數(shù)的反碼和補(bǔ)碼均與原碼相同,負(fù)數(shù)的反碼為:保持原碼符號(hào)位不變,數(shù)值位均取反;
    發(fā)表于 11-18 08:49

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

      補(bǔ)碼的正數(shù)和反碼以及原碼,普通二進(jìn)制的一致,沒有區(qū)別,而負(fù)數(shù)實(shí)際是在原有負(fù)數(shù)的反碼上面加1  正數(shù)的原碼,反碼,補(bǔ)碼是相同的  為什么要有這些碼?  原碼不方便進(jìn)行
    發(fā)表于 04-13 17:04

    個(gè)人計(jì)算機(jī)中的串行端

    【LabVIEW從入門到精通】4.1.5 個(gè)人計(jì)算機(jī)中的串行端口
    發(fā)表于 01-08 15:43 ?0次下載

    從5個(gè)方面解析計(jì)算機(jī)中的字符編碼概念

    字符編碼是計(jì)算機(jī)編程不可回避的問題,不管你用 Python2 還是 Python3,亦或是 C++, Java 等,我都覺得非常有必要厘清計(jì)算機(jī)中的字符編碼概念。
    的頭像 發(fā)表于 01-16 09:08 ?7938次閱讀
    從5個(gè)方面<b class='flag-5'>來</b>解析<b class='flag-5'>計(jì)算機(jī)中</b>的字符編碼概念

    整數(shù)如何在計(jì)算機(jī)中表示

    我們?nèi)粘S玫恼麛?shù)都是十進(jìn)制數(shù)(Decimal),也就是我們通常所說的逢十進(jìn)一。因?yàn)槲覀內(nèi)祟愑惺种?,所以自然而然地?huì)想到采用十進(jìn)制的計(jì)數(shù)和計(jì)算方式。然而,現(xiàn)在幾乎所有計(jì)算機(jī)都采用二進(jìn)制數(shù)(Binary)編碼方式,所以我們?nèi)粘K玫降恼麛?shù)如果
    發(fā)表于 06-11 17:47 ?0次下載
    整數(shù)如何在<b class='flag-5'>計(jì)算機(jī)中表示</b>

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

    計(jì)算機(jī)有三種編碼方式表示同一個(gè)數(shù): 原碼:符號(hào)位加上真值的絕對(duì)值,第一位表示符號(hào),其余位表示值。 反碼:正數(shù)的反碼是其本身;
    的頭像 發(fā)表于 02-12 15:28 ?9069次閱讀

    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 ?2488次閱讀
    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 ?4034次閱讀
    <b class='flag-5'>計(jì)算機(jī)</b>原碼、反碼、<b class='flag-5'>補(bǔ)碼</b>的概念

    DRAM在計(jì)算機(jī)中的應(yīng)用

    DRAM(Dynamic Random Access Memory,動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器)在計(jì)算機(jī)系統(tǒng)扮演著至關(guān)重要的角色。它是一種半導(dǎo)體存儲(chǔ)器,用于存儲(chǔ)和快速訪問數(shù)據(jù),是計(jì)算機(jī)主內(nèi)存的主要組成部分。以下是對(duì)DRAM在
    的頭像 發(fā)表于 07-24 17:04 ?1250次閱讀

    邊沿觸發(fā)器在計(jì)算機(jī)中的應(yīng)用

    邊沿觸發(fā)器在計(jì)算機(jī)中的應(yīng)用極為廣泛,它們作為數(shù)字電路的基本單元,對(duì)于實(shí)現(xiàn)計(jì)算機(jī)內(nèi)部的時(shí)序控制、數(shù)據(jù)存儲(chǔ)與傳輸、以及復(fù)雜邏輯功能等方面起著至關(guān)重要的作用。以下將從邊沿觸發(fā)器的定義、特點(diǎn)、工作原理及其在
    的頭像 發(fā)表于 08-12 14:20 ?585次閱讀

    計(jì)算機(jī)中總線的作用是什么

    計(jì)算機(jī)中,總線(Bus)扮演著極其重要的角色,它是計(jì)算機(jī)內(nèi)部各功能部件之間傳送信息的公共通信干線。總線不僅連接了計(jì)算機(jī)的各個(gè)核心組件,還確保了數(shù)據(jù)、指令和控制信號(hào)的高效、準(zhǔn)確傳輸。
    的頭像 發(fā)表于 08-26 15:57 ?1503次閱讀