99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

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

嵌入式那些事 ? 來源:嵌入式那些事 ? 2024-01-09 12:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在計(jì)算機(jī)內(nèi)部數(shù)值是以補(bǔ)碼的方式進(jìn)行存儲的,采用補(bǔ)碼進(jìn)行數(shù)據(jù)存儲當(dāng)然有其優(yōu)點(diǎn),下面會一一介紹相關(guān)內(nèi)容,讓各位徹底弄懂原碼、反碼、補(bǔ)碼的概念以及為什么采用補(bǔ)碼作為數(shù)據(jù)存儲的方式。

注意:下面列舉的例子均是指8位的字節(jié)數(shù)據(jù)。對于16位,32位的數(shù)據(jù)同樣適用,只是為了書寫方便,8位是最好的選擇啦!

1、無符號數(shù)與有符號數(shù)

在介紹原碼、反碼和補(bǔ)碼的概念之前,先來了解下無符號數(shù)和有符號數(shù)。

在計(jì)算機(jī)系統(tǒng)中,我們可以將數(shù)分為兩類:無符號數(shù)和有符號數(shù)。無符號數(shù)的意思是我們不關(guān)心這些數(shù)的符號,因此也就無所謂正負(fù),反正它們就是數(shù)而已,就像小學(xué)生一樣,眼中只有自然數(shù)。在8位的字節(jié)運(yùn)算中,無符號數(shù)的范圍是0000_0000B~1111_1111B,即十進(jìn)制的0~255。

有符號數(shù)是分正負(fù)的,而且規(guī)定,數(shù)的正負(fù)要通過它的最高位來辨別。如果最高位是0,它就是正數(shù);如果是1,就是負(fù)數(shù)。這樣一來,在8位的字節(jié)運(yùn)算環(huán)境中,正數(shù)的范圍是0000_0000B~0111_1111B,即十進(jìn)制的0~127;負(fù)數(shù)的范圍是1000_0000B~1111_1111B,即10進(jìn)制的-128~-1。也就是說8位的數(shù)據(jù),有符號數(shù)的范圍是-128~127(對這里的負(fù)數(shù)有疑問的可以往下面看)。

2、原碼、反碼與補(bǔ)碼

原碼:最高位表示符號位,其余位代表數(shù)值大小。如果最高位是0,它就是正數(shù);如果最高位是1,就是負(fù)數(shù)。例如:十進(jìn)制數(shù)+2,其二進(jìn)制形式為:0000_0010B;如果是-2,就是1000_0010B。因?yàn)樽罡呶皇欠栁?,所以原碼二進(jìn)制的形式值不等于真正的數(shù)值。例如上面的有符號數(shù)1000_0010B,其最高位1代表負(fù)數(shù),表示的數(shù)值為-2,而不是形式值130(1000_0010B轉(zhuǎn)換成無符號十進(jìn)制等于130)。

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

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

下面列舉幾個8位二進(jìn)制數(shù)的原碼、反碼和補(bǔ)碼的編碼形式:

十進(jìn)制數(shù) 原碼 反碼 補(bǔ)碼
42 0010 1010 0010 1010 0010 1010
-42 1010 1010 1101 0101 1101 0110
127 0111 1111 0111 1111 0111 1111
-127 1111 1111 1000 0000 1000 0001

3、補(bǔ)碼存儲數(shù)據(jù)的優(yōu)點(diǎn)

在講述原碼、反碼和補(bǔ)碼時,有一個特殊的數(shù)值沒有涉及到,那就是0,在我們平時使用中,0是沒有正負(fù)之分的,但是不可否認(rèn)+0 = -0,那么下面列舉下+0,-0的原碼、反碼與補(bǔ)碼的形式:

十進(jìn)制數(shù) 原碼 反碼 補(bǔ)碼
+0 0000 0000 0000 0000 0000 0000
-0 1000 0000 1111 1111 0000 0000

為什么-0的反碼1111_1111B進(jìn)行加1操作求取到的-0補(bǔ)碼是0000_0000B。因?yàn)檫@里假定數(shù)據(jù)寬度是8位的,1111_1111B加1之后,會逐個向上進(jìn)位,我們假定有第9位,且值為0,那么0_1111_1111B加1之后,就變成了1_0000_0000B,但是實(shí)際上我們要的數(shù)據(jù)是8位的寬度,這里舍棄第9位,最后結(jié)果就變成了0000_0000B。

好了,在講述補(bǔ)碼的優(yōu)點(diǎn)之前,先看看計(jì)算機(jī)為什么不使用原碼作為數(shù)的存儲格式而采用補(bǔ)碼作為數(shù)的存儲格式。

下面說說原碼的優(yōu)缺點(diǎn)吧。

原碼的優(yōu)點(diǎn)當(dāng)然是簡單直觀,例如+2的原碼為:0000_0010B,-2的原碼為:1000_0010B。

原碼的缺點(diǎn)也顯而易見

(1)、+0與-0在原碼中竟然有兩個二進(jìn)制形式,與我們熟知的+0=-0貌似有出入。

(2)、原碼不能直接參加運(yùn)算,可能會出錯。例如:1+(-1)=0,而用原碼的二進(jìn)制形式進(jìn)行運(yùn)算為:0000_0001B + 1000_0001B = 1000_0010B,換算成十進(jìn)制為-2,顯然計(jì)算結(jié)果錯誤。

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

首先,根據(jù)運(yùn)算法則減去一個正數(shù)等于加上一個負(fù)數(shù),即: 1-1 = 1+(-1),所以計(jì)算機(jī)被設(shè)計(jì)成只有加法而沒有減法,而讓計(jì)算機(jī)辨別”符號位”會讓計(jì)算機(jī)的基礎(chǔ)電路設(shè)計(jì)變得十分復(fù)雜,于是就讓符號位也參與運(yùn)算,從而產(chǎn)生了反碼。

用反碼計(jì)算,出現(xiàn)了”0”這個特殊的數(shù)值,0帶符號是沒有任何意義的。而且會有0000_0000B和1000_0000B兩個原碼編碼表示0。于是設(shè)計(jì)了補(bǔ)碼,負(fù)數(shù)的補(bǔ)碼就是反碼+1,正數(shù)的補(bǔ)碼就是正數(shù)本身,從而解決了0的符號以及兩個編碼的問題:用0000_0000B表示0,用1000_0000B表示-128。

注意:-128并沒有原碼和反碼。使用補(bǔ)碼,不僅僅修復(fù)了0的符號以及存在兩個編碼的問題,而且還能夠多表示一個最低數(shù)值。

如果還不清楚-128怎么來的,那么我就來按我的想法來推出來吧,-127的原碼為:1111_1111B,則其反碼為:1000_0000B,補(bǔ)碼為:1000_0001B,那么自然我們可以想想補(bǔ)碼為1000_0000B代表的就是-128=-127-1=1000_0001B - 1= 1000_0000B。這也就是8位數(shù)據(jù)最小的負(fù)整數(shù)了。

這就是為什么8位二進(jìn)制,使用補(bǔ)碼表示的范圍為[-128,127]

補(bǔ)碼存儲數(shù)據(jù)的優(yōu)點(diǎn)

(1)、避免了0的編碼有兩個;

(2)、符號位和有效值位可以一起處理,減法通過加法就可以實(shí)現(xiàn),即簡化了計(jì)算機(jī)的結(jié)構(gòu)設(shè)計(jì)也提高了運(yùn)算速度。

補(bǔ)碼存儲數(shù)據(jù)的缺點(diǎn)

(1)、不夠簡單直觀。當(dāng)然這里的不夠簡單直觀是對我們來說的。計(jì)算機(jī)倒沒什么。

下面給大家推薦一個計(jì)算補(bǔ)碼的小工具,那就是我們經(jīng)常使用的Windows計(jì)算器,只要選擇好相應(yīng)的數(shù)據(jù)寬度,輸入你的數(shù)值,就可以觀察到對應(yīng)的二進(jìn)制形式了:

ed7f1056-aea6-11ee-8b88-92fbcf53809c.png

2018-12-25_191046

eda1768c-aea6-11ee-8b88-92fbcf53809c.png

好了,講了這么多,相信大家對原碼、反碼和補(bǔ)碼都有一定的認(rèn)識了。

審核編輯:湯梓紅

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

    關(guān)注

    19

    文章

    7649

    瀏覽量

    90538
  • 原碼
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

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

    關(guān)注

    0

    文章

    14

    瀏覽量

    7691
  • 符號
    +關(guān)注

    關(guān)注

    0

    文章

    55

    瀏覽量

    4553

原文標(biāo)題:計(jì)算機(jī)基礎(chǔ)-原碼 反碼 補(bǔ)碼 基礎(chǔ)解析

文章出處:【微信號:嵌入式那些事,微信公眾號:嵌入式那些事】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    原碼、補(bǔ)碼反碼、有符號數(shù)、無符號數(shù)概念.pdf

    原碼、補(bǔ)碼、反碼、有符號數(shù)、無符號數(shù)概念.pdf
    發(fā)表于 11-15 08:44

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

    首先提幾個概念: 原碼,反碼,補(bǔ)碼     原碼是什么?      原碼就是早期用來表示數(shù)字的一
    發(fā)表于 09-17 10:00

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

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

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

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

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

    1. 數(shù)制為更好描述和記憶微型計(jì)算機(jī)的地址,代碼一般采用十六進(jìn)制.原碼,反碼補(bǔ)碼正數(shù)的反碼補(bǔ)碼
    發(fā)表于 11-18 08:49

    什么是原碼、反碼補(bǔ)碼

    文章目錄1 前言2 什么是原碼反碼補(bǔ)碼2.1 原碼表示法2.2 反碼表示法2.3 補(bǔ)碼表示法
    發(fā)表于 12-15 07:00

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

      很多人都只知道計(jì)算機(jī)使用的是二進(jìn)制,但很少有了解到計(jì)算機(jī)是以補(bǔ)碼的方式進(jìn)行存儲數(shù)據(jù)的?! 〔贿^補(bǔ)碼是通過原碼、
    發(fā)表于 04-13 17:04

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

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

    計(jì)算機(jī)原碼反碼補(bǔ)碼到底是什么

    數(shù)據(jù)在計(jì)算機(jī)里面都是以0和1存儲和運(yùn)算的,這是馮諾依曼體系的基礎(chǔ)。
    的頭像 發(fā)表于 02-12 16:31 ?1.2w次閱讀

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

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

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

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

    單片機(jī)(STC系列8051內(nèi)核單片機(jī))

    1. 數(shù)制為更好描述和記憶微型計(jì)算機(jī)的地址,代碼一般采用十六進(jìn)制.原碼,反碼補(bǔ)碼正數(shù)的反碼補(bǔ)碼
    發(fā)表于 11-11 12:51 ?1次下載
    單片機(jī)(STC系列8051內(nèi)核單片機(jī))

    【2021-04-05】二進(jìn)制中的原碼反碼補(bǔ)碼與二進(jìn)制數(shù)的左移右移

    二進(jìn)制中原碼補(bǔ)碼與左移右移
    發(fā)表于 01-12 18:28 ?13次下載
    【2021-04-05】二進(jìn)制中的<b class='flag-5'>原碼</b><b class='flag-5'>反碼</b><b class='flag-5'>補(bǔ)碼</b>與二進(jìn)制數(shù)的左移右移

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

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

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

    表示負(fù)數(shù)。其余位表示數(shù)值的大小。 二進(jìn)制補(bǔ)碼?是一種用于表示有符號整數(shù)的二進(jìn)制編碼方式,常用于?計(jì)算機(jī)系統(tǒng)中。在補(bǔ)碼系統(tǒng)中,一個數(shù)字的補(bǔ)碼是通過對其
    的頭像 發(fā)表于 09-19 22:25 ?1428次閱讀