衡阳派盒市场营销有限公司

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

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

3天內不再提示

計算機中的負數要用補碼來表示?

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

機器數和真值

機器數

一個數在計算中的二進制表示形式,叫做這個數的機器數,機器數是帶符號的,正數為0,負數為1。

如 :

  • 十進制數+3,機器數就是00000000000000000000000000000011
  • 十進制數-3,那機器數不就是10000000000000000000000000000011 ,想當然~ 實際是11111111111111111111111111111101,這個數是-3的補碼形式,因為負數在機器中是以補碼的形式存在的。

真值

真正數學意義上的數值。因為第一位是符號位,所以機器數形式值就不等于真正的數值。 如:

00000000000000000000000000000011->+3
11111111111111111111111111111101->-3

當然前面的舉例是針對有符號數來說的,對于無符號數,機器數和真值是一致的。

無符號數和有符號數機器數和真值換算方式

無符號數換算:

用一個函數 B2Uw (Binary to Unsigned)的縮寫,長度為w來表示:

圖片

如4位二進制數:

圖片

圖片

圖片

圖片

有符號數換算方式

前面我們說過有符號數在計算機中的機器數是以補碼的形式存在的,其換算公式 B2Tw (Binary to Two`s complement):

圖片

如下面4位二進制數:

圖片

圖片

圖片

圖片

當然還有一種大眾所知的方式:就是使用原碼,反碼,補碼變換規律

原碼,反碼,補碼

計算機機器數運行效率問題

首先要清楚我們計算機中統一使用的是加法計算,對你沒聽錯。。計算機居然不會減法,哈哈。

在補碼概念提出之前,我們來舉幾個例子:

圖片

可以看到在有負數參與的加法計算得到的結果是有誤的。

如果需要得到正確的結果,計算器不得不是有其他方式去得到,這樣必然就會影響運行效率。

為了解決負數在計算機中運行效率問題,科學家們提出了補碼的概念。

補碼:

使用補碼獲取真值

那如何使用補碼規則獲取一個負數的真值呢?

圖片

假設我們從計算中獲取了一個二進制為10000001的8位機器數,如何獲取其真值。

  • step1 .首先10000001是指一個補碼形式機器數,實際上在計算機系統中,所有的整數都是以補碼的形式存在,包括正數和負數,正數的補碼就是原碼自己所以統一使用補碼來存儲。
  • step2 .按照補碼到反碼規則,在補碼10000001基礎上-1,將得到反碼:10000000
  • step3 .按照反碼到原碼規則,將符合位不變,反碼取反即可得原碼:11111111
  • step4 .按照原碼的真值概念:原碼的符合位為符號位,不參與計算,其他位為真值的絕對值即可:- 127

圖片

補碼的計算邏輯

我們回到前面分析運行效率時舉的正正,負負,正負相加例子:

這里我們使用補碼再來計算下:

圖片

可以看出,將符號以補碼的形式存儲在計算機中之后就可以使用加法來代替減法的操作,大大提高了計算機的運行效率。

補碼的設計來源

通過文章前半部分介紹,相信你已經對補碼有了一個比較全面的概念了,但是補碼是怎么設計出來的呢?

數學里面有一個“補數”概念。

補數

生活中有很多例子,只要是 帶周期性的事務性質的都可以用補數來形容 。比如:時鐘或者轉盤等。

圖片

假設當前時間是2點,你要讓時鐘顯示到12點,那么有兩個方式。

  • 方式1 .將指針順時針撥動10個點,做的是 加法 :+10。
  • 方式2 .將指針逆時針撥動2個點,做的是 減法 :-2。

對于時鐘來說,不管你是方式1的加法運行還是方式2的減法運算,指針都指向了12點,實現的效果是一致的, 那我們就說+10和-2是兩個補數,它們的絕對值之和12就是補數的模

這種規律也被應用到計算機二進制中 。下面我們使用一個例子來看:

假設要計算:(5)+(-1) = 5+(+?)

  • 5在計算機中的原碼: 0 0 0 0 0 1 0 1
  • -1在計算機中的原碼:1 0 0 0 0 0 0 1

要將這個減法操作變為加法操作,首要任務就是找到模,然后得到-1的正補數相加即可

來看我們的時鐘,每撥動12格為一個周期,就是說復原了,一樣的, 8bit位范圍是-128~127 ,(注意這里我們為了精簡分析使用的是8位來測試計算,實際計算機中場景一般都是32位格式4個字節或者64位計算)所以 其一個周期就是256,也就是其模就是256 (1 0000 0000),不管你是加上256還是減少256,在二進制中,值都是不變的,因為最后一位是溢出位,不會去計算。

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

這樣就將5-1這個減法運算變更為了5+255這個加法操作

下面我們來看5+255:

5:0000 0101

255:0 1111 1111 

二進制相加后:1 0000 0100 ->最高位溢出丟棄所以結果為4.

看到是不是和5-1結果一樣呢?。

其實計算機中的補碼也是這個模式: 找到一個與負數等價的正補數,使用該正補數代替負數,從而將減法運算替換為兩個正數加法運算 ,補碼的出現與運算器的電路設計有關,從設計者的角度看,希望盡可能簡化電路設計和計算復雜度。而使用正補數代替負數就可以消除減法器,實現簡化電路的目的。

我們下期見。

參考:為什么計算機中的負數要用補碼表示?

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

    關注

    2

    文章

    796

    瀏覽量

    41757
  • 計算機
    +關注

    關注

    19

    文章

    7540

    瀏覽量

    88643
  • 十進制
    +關注

    關注

    0

    文章

    67

    瀏覽量

    13283
  • 補碼
    +關注

    關注

    0

    文章

    14

    瀏覽量

    7570
收藏 人收藏

    評論

    相關推薦

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

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

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

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

    計算機中不同硬件對Hz的定義相同嗎

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

    微型計算機中采用的邏輯元件是什么

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

    單片機的重要功能/組成

    1. 數制為更好描述和記憶微型計算機的地址,代碼一般采用十六進制.原碼,反碼和補碼正數的反碼和補碼均與原碼相同,負數的反碼為:保持原碼符號位不變,數值位均取反;
    發表于 11-18 08:49

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

      補碼的正數和反碼以及原碼,普通二進制的一致,沒有區別,而負數實際是在原有負數的反碼上面加1  正數的原碼,反碼,補碼是相同的  為什么要有這些碼?  原碼不方便進行
    發表于 04-13 17:04

    個人計算機中的串行端

    【LabVIEW從入門到精通】4.1.5 個人計算機中的串行端口
    發表于 01-08 15:43 ?0次下載

    從5個方面解析計算機中的字符編碼概念

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

    整數如何在計算機中表示

    我們日常用的整數都是十進制數(Decimal),也就是我們通常所說的逢十進一。因為我們人類有十根手指,所以自然而然地會想到采用十進制的計數和計算方式。然而,現在幾乎所有計算機都采用二進制數(Binary)編碼方式,所以我們日常所用到的整數如果
    發表于 06-11 17:47 ?0次下載
    整數如何在<b class='flag-5'>計算機中表示</b>

    計算機為什么使用補碼的形式表示負數

    計算機有三種編碼方式表示同一個數: 原碼:符號位加上真值的絕對值,第一位表示符號,其余位表示值。 反碼:正數的反碼是其本身;
    的頭像 發表于 02-12 15:28 ?9124次閱讀

    FPGA有符號數,定點小數表示計算機數值表示規則

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

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

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

    DRAM在計算機中的應用

    DRAM(Dynamic Random Access Memory,動態隨機存取存儲器)在計算機系統扮演著至關重要的角色。它是一種半導體存儲器,用于存儲和快速訪問數據,是計算機主內存的主要組成部分。以下是對DRAM在
    的頭像 發表于 07-24 17:04 ?1562次閱讀

    邊沿觸發器在計算機中的應用

    邊沿觸發器在計算機中的應用極為廣泛,它們作為數字電路的基本單元,對于實現計算機內部的時序控制、數據存儲與傳輸、以及復雜邏輯功能等方面起著至關重要的作用。以下將從邊沿觸發器的定義、特點、工作原理及其在
    的頭像 發表于 08-12 14:20 ?703次閱讀

    計算機中總線的作用是什么

    計算機中,總線(Bus)扮演著極其重要的角色,它是計算機內部各功能部件之間傳送信息的公共通信干線。總線不僅連接了計算機的各個核心組件,還確保了數據、指令和控制信號的高效、準確傳輸。
    的頭像 發表于 08-26 15:57 ?1887次閱讀
    百家乐注册优惠平台| 巴登娱乐城| 百家乐官网路单走势图| 华盛顿百家乐的玩法技巧和规则 | 怎么玩百家乐官网呀| 威尼斯人娱乐场 澳门赌场| 澳门百家乐官网会出老千吗| 百家乐游戏唯一官网网站| 百家乐官网玩法注意事项| 唐人街百家乐的玩法技巧和规则| 百家乐官网代理每周返佣| 利博百家乐的玩法技巧和规则 | 百家乐官网怎样做弊| 百家乐猪仔路| 木棉百家乐官网网络| 百家乐稳赢投注方法| 百家乐官网代理龙虎| 百家乐官网百家乐官网游戏| 百家乐发牌规| 网络百家乐官网的玩法技巧和规则 | 扬州棋牌中心| 关于百家乐概率的书| 澳门百家乐官网鸿福厅| 免费百家乐过滤| 蓝盾百家乐官网赌场娱乐网规则| 顶级赌场官方下载| 玩百家乐技巧博客| 真人百家乐官网现金游戏| 总玩百家乐有赢的吗| 做生意店子内风水布置| 百家乐官网娱乐网站| 威尼斯人娱乐城代理佣金| 百家乐登封代理| 百家乐官网在线投注系统| 大发888娱乐场168| 百家乐庄闲必赢| 百家乐官网打印机分析| 大发888真钱游戏娱乐城下载| 百家乐玩法与规则| 百家乐官网视频下载| 大发888体育在线投注平台|