日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计算机基础——原码、反码、补码转换

發布時間:2025/3/19 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机基础——原码、反码、补码转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

      • 說明
      • 概念
      • 示例
      • 計算機中二進制為什么使用補碼表示

說明

在看JDK源碼的過程中,可以看到很多關于位運算的內容,位運算當然涉及計算機中二進制數字的存儲方式以及值之間的轉換,本文介紹一下二進制的三種表示方式:原碼、反碼、補碼。

概念

原碼: 將最高位作為符號位(0表示正,1表示負),其它數字位代表數值本身的絕對值。
反碼:正數的反碼和原碼相同。如果是負數,則將原碼符號位不變,其余各位取反,得到的就是負數的反碼。

補碼:正數的補碼和原碼相同。如果是負數,則將原碼符號位不變,其余各位取反,然后將得到的數值加1(負數的補碼也可以理解成反碼加1)。

示例

通過上面的介紹,我們已經知道了幾種二進制碼之間的關系,下面用一個示例更直觀表示一下。為了計算方便起見,假設計算機存儲的是8位下的值。

十進制數原碼反碼補碼
+1270111 11110111 11110111 1111
+10000 00010000 00010000 0001
+00000 00000000 00000000 0000
-01000 00001111 11110000 0000
-11000 00011111 11101111 1111
-1271111 11111000 00001000 0001

總結一下:

  • 正數的原碼、反碼、補碼是相同的。
  • 負數的反碼是符號位不變其余按照原碼按位取反,負數的補碼是反碼加1;
  • 計算機運算以及存儲都是基于補碼形式。
  • 0的補碼只有唯一表示0000 0000
  • -128沒有原碼和反碼,因為已超表示范圍,原碼和反碼區分正0負0,但是補碼不需要,空出來的這個位置用來表示-128即1000 0000
  • 8位有符號數值的范圍為[-128,127)注意包含-128
  • 計算機中二進制為什么使用補碼表示

    這里面牽扯到一個很重要的計算方式模運算。通過模運算實現化減為加,本質上是將溢出的部分舍去而不改變計算結果。
    8位運算的模為256=2^8。
    在無符號位的情況下:127+2=129

    129超出了8位運算的最大表示范圍,所以上面的二進制的結果1000 0001表示的轉換為原碼為1111 1111即為-127。意思就是說129在計算機中的表示和-127是一樣的,就像是時鐘過了12點重新從0點開始了,超過了最大的數就從最小的數開始,256類似于時鐘的一圈。
    這里我們可以得出結論:負數的補碼為模減去該數的絕對值
    以-3為例:
    -3原碼:1000 0011
    -3反碼:1111 1100
    -3補碼:1111 1101
    使用模運算計算結果:-3=256-3=253=1111 1101(二進制)

    根據下面的例子我們看一下補碼是如何化減為加的
    127-3=127+(-3)=124=0111 1100(二進制)

    由于我們存儲的是8位,因此溢出舍棄得到的是0111 1100=124(十進制),因此補碼的化減為加核心是通過溢出舍棄操作來完成的。

    總結

    以上是生活随笔為你收集整理的计算机基础——原码、反码、补码转换的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。