C語言中的原 反 補碼,C語言中的正碼,反碼,和補碼作何解釋 名詞解釋

2025-01-06 13:30:06 字數 2770 閱讀 7090

1樓:甕雁宇賦

c語言中,所有的整型資料實際儲存的都是補碼。

要計算補碼,先要知道原碼的概念,原碼也就是乙個10進位數的二進位表達方式,比如100的原碼為1100100。

補碼的計算原則為:

對於無符號數以及有符號數中的正數,其補碼就是原碼本身;

對於有符號數中的負數,其補碼為真值絕對值的反碼加一,其中反碼為原碼按位取反。

針對負數舉例說明:

100在用char型(8位)表示時,其補碼可以按照如下流程計算。

100的原碼為01100100

2、按位取反,得到反碼為10011011

3、將反碼加1,即10011011+1

於是-100的補碼錶示就是10011100,也就是0x9c(16進位)。

2樓:軒轅樹花祭汝

int,字長為2

位元組共16位二進位數,數的範圍是-32768~3276732768的二進位是11111111

11111111負數最高位為1.

32767的二進位是01111111

正數最高位為0.

正數的原碼和補碼一樣。

負數的補碼是原碼取反加1.則。

取反011111111

結果和你書上看到的一樣,說明書是對的,哈哈。

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

3樓:沙裡波特

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

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

c 語言是高階語言。

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

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

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

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

4樓:程英銳紀精

數值在計算機中表示形式為機器數,計算機只能識別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等其他高階語言中使用的都是原碼。

c語言中,原碼轉換成反碼的時候,符號位取不取反?(負數和正數一樣嗎?)

5樓:海天盛

正的原函式,負的和補的是一樣的。乙個負數的補碼是它的倒數加上1,當負數變成倒數和補碼時符號位是一樣的,所以它是1。

1.首先,我們需要知道轉換規則:原碼轉換為逆碼:符號位不變,數字位逐位倒轉。

2.那麼逆碼到原碼是一樣的,但規則不同:符號位不變,數字位「位倒轉」。

4. 最後,將補碼轉換為原碼:符號位不變,值位按位倒轉,最後一位加1,即補碼的補碼等於原碼。

5. 求補碼(變數補碼)的轉換規則與前乙個有區別:符號位和值位倒轉,最後一位加1。

6樓:網友

正數原碼,反碼,補碼三個都是一樣的。負數的補碼是它的反碼加1,負數變反碼和補碼的時候符號位是不變的,保持為1

7樓:蓉雪球

不是有補碼嗎?開頭的0和1不是決定了正負嗎。

8樓:網友

額。算嘛~~!當然要算嘍! 不然怎麼出補碼撒!

c語言中for的用法,C語言語言中FOR的用法

你這些程式肯定是某些二流教科書上,根本就是誤導人。for後面語句 需要迴圈的 不管是一句還是多句都要加!因為加 比不加 讓程式表述得更加清楚!printf d x,y 不會報錯,printf是一個多引數的c函式,編譯的時候,printf函式本身並不知道 引號 中需要多少個引數,它只是按照順序從堆疊上...

C語言中for迴圈語句,c語言中for語句是怎麼用的

for 語句包括三個表示式,第一個和第三個可以省略,省略第一個的意思是在for之前已經對變數初始化,例如i 0 for i 5 i 和for i 0 i 5 i 意思相同 第三個省略的意思也很明顯,原來的i 可以在for迴圈語句中實現,例如 for i 0 i 5 i 和for i 0 i 5 i ...

c語言中char的問題,C語言中char的問題

書上講的是使用上的情況。對char型別的情況介紹是正確的,但是對字元常量書上忽略了一點技術細節。字元常量這個東西的具體情況並不是像你理解的那樣,這個東西的型別其實是 int而不是char。你可以找個編譯器試試看sizeof a 的結果是4。所以你寫 字元 或者 1234 是可以的,如果你寫 5字元 ...