-
int a 是有符號的數字; 根據編譯器的不同,它可以是 2 位元組編碼(short int)或 4 位元組(long int);
以 2 位元組編碼為例:10 = 0000 0000 0000 1010b(注 1); 這是乙個倒置的程式碼(按位),所以。
10 = 1111 1111 1111 0101b 所以 10+1 = 1111 1111 1111 0110b (注 2) 這恰好是 -10 的補碼表示,所以輸出是 -10;
要驗證此問題,您可以在上面新增 10 和 -10 的編碼(分別為注釋 1 和 2)。 在確定單詞長度的情況下,加法後,最高數字的進位“自然”丟失,因此結果為 0。
補碼實際上是一對非 0 數字,允許新增到有限的字長中,它們的總和為 0。 滿足此條件的對數在字長有限的情況下彼此相反。
-
補碼的演算法是按位否定然後+1,然後在計算機內部,負數是按照補碼儲存的,所以你按位否定10,那麼+1當然是-10的補碼。
-
在計算機系統中,數值以二進位形式表示。
1、為0000 0001。 1,然後是 1111 1111。 如果要將數字的符號更改為“相反的數字”,可以執行以下操作:
-x = ~x + 1運算後,如果原始數字為10,則結果為10。
如果原始數字是 10,則得到 10。
該演算法基於二進位數系統的特點。
該演算法與查詢補碼無關:“獲取原始程式碼並將原始程式碼原封不動地新增到符號位中”。
-
1.為什麼要使用原始程式碼、反向程式碼和補碼。
1) 你如何表示負二進位?
答:在原始程式碼中,高位 1 表示負數。
2) 計算機如何實現減法?
答:對於計算機來說,邏輯運算應該設計得簡單,1-1可以表示為1+(-1),所以沒有減法,減法是通過加法來實現的。
00000001] 原版。
10000001] 原版。
10000010] 原版。
如果使用原始程式碼並讓符號位也參與計算,則很明顯,減法的結果不正確。 這就是為什麼計算機不使用原始碼來表示數字的原因。
為了解決原碼的減法問題,有乙個逆碼:
用於計算十進位系統的表示式:
0001]原件。
0001]原件。
0001]反。
1110]反。
[1111]反。
0000]。
3)如何表示0的二進位,+0和-0之間有區別嗎?
答:+0 和 -0,但是補碼是 0,補碼在計算機中使用,所以在計算機中沒有 +0 和 -0 的區別。
原因:0 的原始程式碼、反向程式碼和補碼均為 000000000
0 的原始程式碼為 1000000000,反向程式碼為 11111111
補碼是 00000000
補碼解決了符號 0 的兩個編碼問題:
0001]原件。
0001]原件。
0001]補充。
1111]增補。
0000] 補碼 = [0000
0000] 原始 = 0
4) 8位-128的原始程式碼是什麼?
答:-128沒有原碼,原碼在[-127,127]範圍內表示,計算機用補碼來表示,因為去掉了-0,1000
0000]補充。
它是-128
它可以用來表示最小值 -128,補碼的範圍是 [-128,127]。
2.為什麼左移是邏輯運算,右移是算術運算。
左移是邏輯運算,右移是算術運算。
邏輯移位與標誌位(加號和減號)一起操作,因此可以更改加號和減號。
算術移位是固定標誌位,移動其他位,不會改變加號或減號,但前面的移動是補0或1,如果標誌是1,那麼全部補1,如果是0,那麼全部補0。
答:如果負數向右移成0,乙個是負數變成正數,數字是1,因為計算機是補碼表示,因為它恰到好處。
3.左移等於*2,右移等於2,是否也適用於負數。
答:是的,原來的誤解是錯誤的,因為它是從原始程式碼的角度考慮的,而不是從補碼的角度考慮的,計算機使用補碼進行計算。 輸出的基數也是乙個補碼。
在此示例中,int 為 32 位,4 個位元組,因此十六進製中有 8 位。
-
文章說,當 eof, get 將返回 11111111111111111111111111111111,如果你直接給 char 賦值,它將被截斷為 11111111。
如果 char 是無符號的,則與 2 8-1 相比,它變為 2 32-1,並且不等於。
如果 char 是有符號的,則更有可能成功。 因為這個時候,在提公升型別的時候會發生符號位擴充套件,所有的11111111都會加在它前面。
但是,如果檔案中有11111111字元,get 將返回乙個00000000000000000000000011111111並為 char 分配乙個值,該值仍將被截斷為 11111111。 這會導致讀取提前結束。
所以你需要先給乙個int,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 將其分配給 char,您將能夠讀取字元11111111。
至於你的問題,我不明白成為“補充”是什麼意思。
有些關係是句法上的和相似的:C語言更接近底層C++是C的擴充套件,並新增了類的機制; C 比 C++ Microsoft 更進一步。 採用 .net 的語言。 >>>More
FIFA Online3 皇家馬德里的 cc 卡是:克里斯蒂亞諾·羅納爾多、勞爾、卡卡、卡西、拉莫斯、卡洛斯等。 >>>More
我覺得沒關係,現在系統多是用C語言寫的,但是一開始可能用C語言寫的,然後系統比較大,很難改成C++,因為系統比較大,所以我覺得用C++寫就好了,好控制,當然, 速度是要打折扣的,但穩定性和靈活性應該更重要,畢竟慢總比不可修改和舊的崩潰好,C++的速度也不比C差多少,甚至在某些地方更快,因為現在C++的開發比CA快得多 Bjarne Stroustrup說, 學習 C 只是為了處理被當作遺產的**,呵呵。我想知道這是否有點過分? >>>More