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字元 ...