-
在計算機中,沒有原始或反向程式碼。
輸入的值,無論是正值還是負值,都會被編譯並儲存為補碼。
編寫乙個 C 程式來顯示數值的二進位,如下所示。
-
0000 的二進位 7
0111,是按位反,結果是 1111
注意,最高位數是1,表示這是乙個負數,負數是計算機中的補碼,補碼是十進位,補碼負號保持不變,其他的都倒過來,最後加1,這就是原碼。 即 1000
1000 是 -8 由公式 n
結果,它是。 (n+1)
-
正數取自原始程式碼,負數對應正數,然後逐位加,如19,原碼用8位二進位00010011,然後00010011其補碼和反碼。
對於-19,因為19的8位原碼是00010011的,所以每個位的反11101100,然後加上1,1110110101,這樣-19的原始碼10010011,反碼11101100,補碼11101101
-
正的與原始程式碼相同。
否定的必須首先將原始程式碼轉換為反向程式碼(不要告訴我您甚至不能反轉程式碼)。
將 1 新增到反向程式碼的基數中,您就可以開始了。
-
正數與素數、逆數和補數相同。
負數的原碼、逆碼和補碼是不同的。
讓我們以兩個位元組(16 位)為例(短型別)來理解這一點:
1) 原始 = 1000 0000 0000 0001 最高位為符號位 1 負,0 正,資料總長度為 16 位
1) 反 = 1111 1111 1111 1110 除符號位外,原始程式碼是逐位反轉的。
1) 補碼 = 1111 1111 1111 1111 反碼 +1
由此,我們來看一下 -12345 的補碼:
12345) 原件 = 1011 0000 0011 1001
12345) 反 = 1100 1111 1100 0110
12345) 補碼 = 1100 1111 1100 0111
我覺得你誤會錯了,因為你不了解資料按位元組的儲存,計算機中資料的最小儲存單元是位元組,乙個位元組占用8位,一般(32位機器)資料儲存空間的大小定義為:
char 1byte
short 2bytes
int 4bytes
long 4bytes
float 4bytes
double 8bytes
在 C 程式中,可以使用 sizeof 命令來檢查某種型別的空間的大小,例如 printf("%d", sizeof(long) ) 可以編寫自己的程式來測試您的機器。
-
C 語言,可以使用 int 型別。
整數是 16 位二進位數,模數為 65536。
那麼,12345 的補碼是:65536 12345 | = 53191。
寫成 16 位二進位數,它是:1100 1111 1100 0111。
-
在 C 中,所有整數資料實際上都儲存為補碼。
要計算補碼,首先要知道原始程式碼的概念,它是十進位數的二進位表示式,例如,100 的原始程式碼是 1100100。
補碼的計算原理如下:
1 對於無符號數和有符號數中的正數,補碼為原始程式碼本身;
2 對於有符號數中的負數,補碼是真值加一的絕對值的倒數,其中反碼為原始碼,位反轉。
負數示例:
當 100 用 char(8 位)表示時,可以按照以下過程計算其補碼:
1.原始程式碼為100 01100100
2.按位取反轉碼,得到反轉碼為10011011
3.在逆碼中加1,即10011011+1=10011100。
所以 -100 的補碼表示是 10011100,即 0x9c(十六進製)。
-
首先,建議房東去補上“原守則”、“反守則”和“補碼”的相關知識。
我將首先分解它(假設您已經知道這一點):
首先,讓我們從無符號的角度來看問題中的資料:
n = 0x7fff
m = 0x8000
可以看出,對於 n,他的二進位模式是:0111 1111 1111 1111
對於 m,他的二進位模式是:1000 0000 0000 0000
如您所見,最高符號位 n 為 0,m 為 1
所以如果我們從有符號數的角度來看 m 和 n 的二進位資料,我們知道 n 符號位(最高位)是零,所以 n 是正數,m 符號位是 1,所以它是乙個負數。
對於補碼,正數很容易計算,即他的值,即 0111 1111 1111 1111 = 0x7fff = 32767
對於負數 m,我們可以這樣做以了解它的值:
假設 m |m|= x,那麼我們得到 m 的 x
m = 1000 0000 0000 0000
否定:m = 0111 1111 1111 1111
加 1 m + 1 = 1000 0000 0000 0000
這個問題中的資料比較特殊,所以你可以看到 m 和 m+1 的結果看起來是一樣的,其實你可以列出其他值來計算,一般兩種按位模式是不同的)。
x = 32768
然後我們可以看到 m = -x = -32768 或更多。
-
在 C 語言中,不需要補語。
補碼是組合語言中的有符號數字。
C語言是一種高階語言,可以和人類語言一樣寫,直接使用加號和減號,不需要使用補語。
-
正補碼 = 其二進位。
例如,5 的補碼 = 原始程式碼:101;
即 0000,0000,0000,1001
負補碼 = 負數絕對值的二進位,然後倒數 +1;如-5:
-
正數的補碼是它原來的碼本身,負數的補碼是它的絕對值的原碼,反轉1位
-
正數和 0 的補碼總是它自己,負數的補碼是它的絕對值按位反轉,加上 1。
0] 補碼 = 00000000b
1] 補碼 = 00000001b
2] 補碼 = 00000010b
3] 補碼=00000011b
0] 補碼 = 00000000b
1] 補碼 = 11111111b(注意:-1 的絕對值為 1,數字反轉為 11111110b,加 1 得到 -1 的補碼:11111111b)。
2] 補碼 = 11111110b
3] 補碼 = 111111101b
-
你可以在任何 C 語言書籍中看到細節,我有多清楚並不重要。
我會告訴你我的理解。 把所有的數字都想象成時鐘上的數字。
00000000---00000001--00000002.。。一直到 ffffffff
ffffffffff 為 -1
我說的是 32 位有符號數字 int 使用這個時鐘概念來理解補碼,我保證你永遠不會忘記它。
否則,只要記住補碼=反碼+1反碼=原碼和ffffffff取差額,這樣你遲早要在面試中被蒙蔽。
希望對你有所幫助。
-
正數是反碼,負數是反碼+1
-
如果是正數,補碼=原始碼,如果是負數,x = x + 1 + 0xffffffff,然後找到 x 的原始碼。
scanf("%d", &x);
x = (x + 1 + 0xffffffff) %0xffffffff;
todo...然後只需找到 x 的原始程式碼即可。
此0xffffffff是 int 可以表示的最大值,如果 int 為 4 個位元組,則通常為 4 個位元組。
-
這就是問題所問的嗎? 或者您是否要求輸出十進位數的記憶體表示?
-
“當您輸入它時,計算機將其作為補充,然後輸出原始程式碼”是不正確的。
計算機以補碼的形式儲存整數資料。 與補體 1解決了 +0、-0、2 的問題所有操作都可以通過新增劑完成。
當我們輸入資料時,我們都是人們在現實生活中可以理解的數字:例如,十進位數,當計算機儲存它們時,它們會自動將它們轉換為補碼進行儲存和計算。 輸出時,會根據人的要求自動轉換為相應的可識別資料進行展示。
在超過 32 位的機器上,短路占用兩個位元組,這是乙個有符號的數字,可以表示以下資料範圍:-32768 32767。 你輸入 65535,然後你超出了它的表示範圍,計算機儲存了 16 個 1,對於短型別,16 個 1 表示 -1,所以你的輸出是 -1
呵呵,這個哥哥和我幾個月前的樣子很像。 在學習 C 之前,我認為 C 應該能夠實現任何事情。 但是在學習之後,我發現我離Windows還很遠。 >>>More
在 VisualStudio 2013 中編寫和除錯 C 語言程式的步驟: 1.開啟 [檔案] - 新建 - 專案以開啟“新建專案”視窗。2. 在[模板]、[名稱]、[位置]和[解決方案名稱]中選擇[Visual C++] Win32控制台應用程式,可以根據需要填寫。 >>>More
y 年 m 月 d 日,是日日嗎?
計算:天 = mon[1] +mon[2] +mon[m-1] +d; >>>More
C 是一種程式語言。
簡單來說,程式設計就是用程式語言編寫程式的過程,以達到一定的目的或借助計算機解決問題,最終得到結果。 >>>More