C語言中,原碼,補碼和反碼怎麼換算?

時間 2023-07-05 14:39:30

1樓:惠企百科

換算方法如下:

1、數在計算機中是以二進位制形式表示的。

2、數分為有符號數和無符號數,原碼、反碼、補碼都是有符號定點數的表示方法。

3、一個有符號定點數的最高位為符號位,0是正,1是副;【原碼】就是這個數本身的二進位制形式。

4、正數的【反碼】和補碼都是和原碼相同;負數的【反碼】是將其原碼除符號位之外的個位求反。

1、c語言是一門通用計算機程式語言,廣泛應用於底層開發。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。

2、儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的c語言程式可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平臺。

2樓:做而論道

在計算機系統中,數值,一律採用補碼錶示和儲存。

在計算機中,並沒有原碼和反碼。

所以,原碼和反碼,與補碼的轉換,是毫無意義的。

你只要掌握「數值與補碼的轉換」,就夠用了。

下表中,有這個轉換的關係式:

原碼、補碼、反碼之間是怎樣轉換的?

3樓:立港娜娜

一、正整數的原碼、反碼、補碼完全一樣,即符號位固定為0,數值位相同。

二、負整數的符號位固定為1,由原碼變為補碼時,規則如下:

1、原碼符號位1不變,整數的每一位二進位制數位求反,得到反碼。

2、反碼符號位1不變,反碼數值位最低位加1,得到補碼。

方法:(1)正整數的原碼,反碼和補碼計算。【符號位為0,原碼=反碼=補碼】

2)負整數的原碼,反碼和補碼計算,先求原碼,再求反碼,最後求補碼。

3)根據補碼求真值,一般使用圖中的公式計算,正整數符號為+,負整數符號為-,通常完成補碼求真後,可以按步驟簡單的逆推一下,看結果是否正確。

4樓:風翼殘念

正數的原碼、反碼、補碼是一致的。(例如:2的原碼:0000 0010,那麼其反碼和補碼都是0000 0010)

負數的反碼顧名思義,是除了符號位與原碼一致,其餘位都與原碼相反。(例如:-2的原碼是1000 0010,那麼其反碼是1111 1101),負數的補碼則是在其反碼的基礎上加1。

例如:-2的反碼是1111 1110)

1、首先,數字除了我們平時最長使用的十進位制數外,還有二進位制,八進位制,十六進位制等。這裡我們的原碼,補碼,反碼之間轉換指的是二進位制數。如下。

2、在二進位制數中,數字的正負是根據首位是0還是1來判斷的,如果首位是0,那麼就是正數,首位是1就代表負數。如下圖。

3、從原碼到反碼,如果該數為正數,也保持不變,如果首位是1,也就是說是負數,就將除了首位的1除外的所有數字取反。如下圖所示。點選即可檢視。

4、如果想要把原碼轉換成補碼,對正數來說,補碼與原碼相同,對負數來說,之間將反碼加1就可以得到補碼,計算示例如下圖所示。當然,我們還可以將補碼轉換為原碼。如果是負數得到的補碼,可以通過求該補碼的補碼來得到原來的原碼。如下。

5樓:網友

首先給的肯定是十進位制數,先轉換為2進位制,然後這一串數字必須為八位別問為啥,得出的二進位制結果放在最後,正數最高位必須為0,中間缺少的地方用0補齊,就得出來了,正數的原碼等於補碼等於補碼,負數的話原碼開頭必須為1,其餘如同上述,反碼最高位也是1,其他數字取相反的比如(1變0,0變1),補碼則在反碼最後一位加1.這是所有結果。

6樓:沙裡波特

直接轉換,即可。

比如,12,其原碼、補碼、反碼,都相等,都是 12。

正數的補碼,是其本身。

負數的補碼,就用它的正數,減一取反,即可得到補碼。

原碼、反碼,根本就沒有用。

所以,在計算機中,也沒有原碼和反碼。

那麼,我們也不必關心這些。

7樓:理工男老

原碼反碼補碼移碼概念和轉換方法。

c語言求原碼的補碼問題

8樓:匿名使用者

必須要用無符號數,位運算的規定就是如此,你想,如果有符號是負數,用哪個來位運算,結果呢。

進行與運算是判斷該數是否最大的負數,注意補碼的數值範圍,負數比正數多一個,該數為最小負數,表示範圍內沒有對應的正數。

9樓:沙裡波特

通過補碼來求原碼?

你以為補碼原碼是一一對應的嗎?

八位補碼,可代表帶符號數-128~127。

八位原碼,可代表帶符號數-127~127。

由此可知,-128 只有補碼,沒有原碼。

在八位補碼中,0~127,是按照正數的原碼來存放的。

另外的 128~255,則是代表數字-128~-1。

將 129~255 「取反加一」,即為-127~-1 原碼。

而 128,沒有對應的原碼。

八位補碼轉成原碼的程式如下:

unsigned char getbits(unsigned char value)

10樓:匿名使用者

幾位的,如果8位的你可以試試。

unsigned char qiufan(signed char x)

其實按照自然的理解最好 ,數字就在計算機裡,不變不換。。。

你所看的什麼原啊反啊的都是你的理解。

11樓:匿名使用者

數在計算機中是以二進位制形式表示的。

數分為有符號數和無符號數。

原碼、反碼、補碼都是有符號定點數的表示方法。

一個有符號定點數的最高位為符號位,0是正,1是副。

以下都以8位整數為例,原碼就是這個數本身的二進位制形式。

例如1000001 就是-1

0000001 就是+1

正數的反碼和補碼都是和原碼相同。

負數的反碼是將其原碼除符號位之外的各位求反[-3]反=[10000011]反=11111100負數的補碼是將其原碼除符號位之外的各位求反之後在末位再加1。

3]補=[10000011]補=11111101一個數和它的補碼是可逆的。

為什麼要設立補碼呢?

第一是為了能讓計算機執行減法:

a-b]補=a補+(-b)補。

第二個原因是為了統一正0和負0

正零:00000000

負零:10000000

這兩個數其實都是0,但他們的原碼卻有不同的表示。

但是他們的補碼是一樣的,都是00000000特別注意,如果+1之後有進位的,要一直往前進位,包括符號位!(這和反碼是不同的!)

10000000]補。

10000000]反+1

00000000(最高位溢位了,符號位變成了0)有人會問。

10000000這個補碼錶示的哪個數的補碼呢?

其實這是一個規定,這個數表示的是-128

所以n位補碼能表示的範圍是。

2^(n-1)到2^(n-1)-1

比n位原碼能表示的數多一個。

原碼、補碼、反碼之間是怎樣轉換的?

12樓:做而論道

計算機系統中,並沒有原碼和反碼。

不存在的東西,哪有什麼可轉換的呢?

在計算機中,使用的是二進位制。

八個二進位制位,稱為一個位元組。

計數範圍是:

對應十進位制:0 ~ 255,共有 256 個數字。

計數週期是:2^8 = 256。

在計算機中,並沒有負數。

所以,計算機中這些數字,都屬於自然數,即「零和正數」。

但是,實際上,正數,也能當負數用的。

你看 2 位 10 進位制數的計算:

25 + 99 = 一百) 24

如果,你不捨棄進位,結果就 124,+99 還是 99。

如果,你捨棄了超出 2 位數的進位,+99 就相當於-1 。

這時的正數,就稱為「負數的補數」。

演算法是:補數=負數+週期 (10^n),n 是補數的位數。

同理,在計算機中,255 = 1111 1111,就相當於-1。

示例:

如果捨棄了進位 1,這算式,就是:+1 -1 = 0。

如果保留進位,這就是: 1 + 255 = 256。

那麼,254 = 1111 1110,就相當於-2。

只要你捨棄進位,這些正數,就可以代表負數,參加運算。

這些正數,就稱為:負數的補碼。

補碼 = 負數 + 週期(2^n),n 是補碼的位數。

利用補碼,可以把減法,轉換成加法運算。

從而,就能簡化計算機的硬體。

原碼和反碼,都沒有這種功能。

所以,在計算機中,並沒有原碼和反碼。

符號位原碼反碼取反加一,這些,都是「雞肋」。

學習這堆垃圾,花費時間不少,還是弄不懂「補碼的意義」。

老外數學不好,也就只能整這些騷操作了。

原碼、補碼、反碼之間是怎樣轉換的?

13樓:做而論道

在計算機系統中,數值,一律用補碼來表示和儲存。

必須掌握的是「數值與補碼」的轉換。

那麼,原碼、補碼、反碼之間是怎樣轉換的?

在計算機中,並不存在原碼和反碼。

轉換,只能由你人工進行了。

你怎麼轉換都行。

這就和計算機,沒有什麼關係了。

c語言中的正碼,反碼,和補碼作何解釋(名詞解釋)

14樓:沙裡波特

補碼,是在計算機內部,正負數的存放格式。

在計算機內部,並沒有「正碼」、「反碼」。

c 語言是高階語言。

用高階語言程式設計,是不用關心計算機內部的事的。

如果非要涉及計算機內部的細節,那就不是高階語言了。

很多教材書籍的作者,都沒有弄明白:什麼是高階語言。

計算機內部的碼,有很多種了,要是討論起來,c 語言就學不完了。

15樓:程英銳紀精

數值在計算機中表示形式為機器數,計算機只能識別0和1,使用的是二進位制,而在日常生活中人們使用的是十進位制,"正如亞里士多德早就指出的那樣,今天十進位制的廣泛採用,只不過我們絕大多數人生來具有10個手指頭這個解剖學事實的結果。儘管在歷史上手指計數(5,10進位制)的實踐要比二或三進位制計數出現的晚。"(摘自《數學發展史》有空大家可以看看哦~,很有意思的).

為了能方便的與二進位制轉換,就使用了十六進位制(2

4)和八進位制(23).下面進入正題。

數值有正負之分,計算機就用一個數的最高位存放符號(0為正,1為負).這就是機器數的原碼了。假設機器能處理的位數為8.即字長為1byte,原碼能表示數值的範圍為。

0~127)共256個。

有了數值的表示方法就可以對數進行算術運算。但是很快就發現用帶符號位的原碼進行乘除運算時結果正確,而在加減運算的時候就出現了問題,如下:

假設字長為8bits

00000001)原。

10000001)原。

10000010)原。

顯然不正確。

因為在兩個整數的加法運算中是沒有問題的,於是就發現問題出現在帶符號位的負數身上,對除符號位外的其餘各位逐位取反就產生了反碼。反碼的取值空間和原碼相同且一一對應。

下面是反碼的減法運算:

反+(11111110)反。

11111111)反。

有問題。反+(11111101)反。

11111110)反。

正確問題出現在(+0)和(-0)上,在人們的計算概念中零是沒有正負之分的。(印度人首先將零作為標記並放入運算之中,包含有零號的印度數學和十進位制計數對人類文明的貢獻極大).

於是就引入了補碼概念。

負數的補碼就是對反碼加一,而正數不變,正數的原碼反碼補碼是一樣的。在補碼中用(-128)代替了(-0),所以補碼的表示範圍為:

128~0~127)共256個。

注意:(-128)沒有相對應的原碼和反碼,(-128)

補碼的加減運算如下:

00000001)補。

11111111)補。

00000000)補。

正確補+補=(11111111)補。

正確所以補碼的設計目的是:

使符號位能與有效值部分一起參加運算,從而簡化運算規則。

使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計。

所有這些轉換都是在計算機的最底層進行的,而在我們使用的彙編、c等其他高階語言中使用的都是原碼。

計算機中有原碼和反碼嗎?計算機原碼反碼補碼怎麼算

計算機中,並沒有原碼和反碼,只是使用補碼,代表正負數。使用補碼的意義 可以把減法或負數,轉換為加法運算。從而簡化計算機的硬體。比如鐘錶,時針轉一圈,週期是 12 小時。倒撥 3 小時,可以用正撥 9 小時代替。9,就稱為 3 的補數。計算方法 12 3 9。對於分針,倒撥 x 分,就可以用正撥 60...

原碼,反碼和補碼之間有怎樣的計算關係

原碼,反碼,補碼的基礎概念和計算方法.在探求為何機器要使用補碼之前,讓我們先了解原碼,反碼和補碼的概念.對於一個數,計算機要使用一定的編碼方式進行儲存.原碼,反碼,補碼是機器儲存一個具體數字的編碼方式.1.原碼 原碼就是符號位加上真值的絕對值,即用第一位表示符號,其餘位表示值.比如如果是8位二進位制...

為什麼用反碼和補碼算出來的結果再化成原碼不一樣

你猜我猜哇擦猜 數在計算機中是以二進位制形式表示的.數分為有符號數和無符號數.原碼 反碼 補碼都是有符號定點數的表示方法.一個有符號定點數的最高位為符號位,0是正,1是副.以下都以8位整數為例,原碼就是這個數本身的二進位制形式.例如0000001 就是 1 1000001 就是 1 正數的反碼和補碼...