當前位置:編程學習大全網 - 源碼下載 - 補碼的計算問題

補碼的計算問題

妳確實錯了:

-60=11000100

53=00110101

11000100+00110101=11111001

正數的補碼 與原碼相同。

負數的補碼 符號位為1,其余位為該數絕對值的原碼按位取反;然後整個數加1。

所以:-60的 最高位 為1,其余七位 為60的源碼0111100取反後1000011加1為1000100 總起來就是11000100

其結果11111001,其中最高位為1,說明為負數,

其余七位1111001減1為1111000,然後取反為0000111,轉換為十進制為7

總起來就是-7

最高位只是壹個符號位,1就是負數,0就是正數,參與計算,但是不參與取值

關於補碼問題 還有考慮寬度,例如 是按照字節來計算就是8個位,c語言中的char類型就是這種,最大取值為127到-128 ,

如果是 無符號類型,unsigned char ,那麽最高位 不在代表符號,而參與取值 即0到255,沒有負數。

當然c語言中的int 是32位的,原理同上。

妳只所以錯了,是因為混淆了 反碼

例如

原碼:

7的原碼是0 0000111

-7的原碼是1 0000111

可見原碼無法進行加法計算

反碼:

正數:正數的反碼與原碼相同。

負數:負數的反碼,符號位為“1”,數值部分按位取反。

+7= 0 0000111

-7= 1 1111000

補碼:

正數:正數的補碼和原碼相同。

負數:負數的補碼則是符號位為“1”,數值部分按位取反後再在末位(最低位)加1。也就是“反碼+1”。

+7= 0 0000111

-7= 1 1111001

a. 采用補碼後,可以方便地將減法運算轉化成加法運算,運算過程得到簡化。正數的補碼即是它所表示的數的真值,而負數的補碼的數值部份卻不是它所表示的數的真值。采用補碼進行運算,所得結果仍為補碼。

  • 上一篇:學Java可以做什麽?
  • 下一篇:翡翠,現在2000元能買到比較好的嗎?
  • copyright 2024編程學習大全網