int x = 1 , y = ~x ; 求y的值。
我開始算出結果為e,不過這個結果是錯的。
思路:因為計算機是以二進位制的補碼的形式來儲存,所以我們要將 ~1 轉換成補碼,又因為補碼是在反碼的基礎上轉換而來,而反碼又是原碼轉換來的,所以得將 ~1 裝換成原碼。
以下是正確演算法:
∵ 1 = [原] 00000001;
∴ ~1 = [原] 11111110; //先將1取反 , 然後再轉換成原碼
∴ [原] 11111110 = [反] 10000001; //將轉換後的原碼再轉換成反碼
∴ [反] 10000001 = [補] 10000010; //因為反碼為負數,所以轉換補碼需要加一
∴ [補] 10000010 = -2; //補碼最後的結果為-2
如果這裡面有什麼不對的,或是有遺漏的,望大家勿噴。
原碼,反碼和補碼的一些小問題
為什麼補碼等於反碼加一?為什麼補碼中有符號位,只能表示最大正數補碼 127,卻能表示最大正數 128呢?計算機中怎麼對待符號位的?二 反碼 2.數學定義 3.意義 4.注意點 1.計算機中無反碼。三 補碼 四 計算機中對數的儲存於處理 原碼 true form 是一種計算機中對數字的二進位制定點表示...
一 原碼反碼補碼的相互轉換
1 首先,正數的原碼,反碼,補碼相同。我們在這裡不討論。2 我們來討論負數的原碼反碼補碼的相互轉換。負數原碼轉化為反碼 符號位不變,數值位按位取反。原碼 1100 0010 反碼 1011 1101負數反碼轉化成原碼 符號位不變,數值位按位取反。反碼 1011 1101 原碼 1100 0010負數...
乙個小問題
error c2679 binary no operator defined which takes a right hand operand of type class smanip int or there is no acceptable conversion 除錯了好久,就是找不出問題在哪。...