1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          正數和負數的原碼、反碼、補碼及二進制位運算

          來源:互聯網轉載 時間:2024-01-29 07:48:05

          位運算符

          位:二進制簡稱“位”,是二進制計數系統中表示小于 2 的整數符號,一般用 1 或 0 表示,是具有相等概率的兩種狀態中的一種。二進制的位數可表示一個機器字的字長,一個二進制位包含的信息量稱為 1 bit。(摘自百度百科)

          位運算符用來對二進制位進行操作,Java中提供了如下所示的位運算符(操作數只能為整型和字符型數據):
          & 按位與
          | 按位或
          ^ 按位異或
          ~ 按位取反
          除 ~ 以外,其余均為二元運算符。

          一個字節 = 8bit(位)
          一個 int 類型的數值占 32bit(位)

          二進制換算示例
          int i = 123;
          10 進制 123 轉為二進制后等于:1111011

          完整補位后:
          00000000 00000000 00000000 01111011

          tips:全文使用的二進制為 32 位。

          原碼、反碼和補碼

          二進制的最高位為符號位,1 表示負數,0 表示整數,其余位表示數的絕對值。

          123 轉為二進制補齊后為:00000000 00000000 00000000 01111011,這是 123 的原碼。

          負數 -123 的原碼:100000000 00000000 00000000 01111011。

          其中首位是符號位,0代表正數,1代表負數。

          反碼:正數的反碼和原碼相同,負數的反碼是保留其符號位不變,其他位取反,(0 變 1,1 變 0)。

          補碼:正數的補碼和原碼相同,負數的補碼為原碼除符號位外取反 +1。

          注意:整數在計算機中,是以補碼的形式存儲的。

          正數對比

          123 的原碼:00000000 00000000 00000000 01111011

          123 的反碼:00000000 00000000 00000000 01111011

          123 的補碼:00000000 00000000 00000000 01111011

          負數對比

          -123 的原碼:10000000 00000000 00000000 01111011

          -123 的反碼:11111111 11111111 11111111 10000100

          -123 的補碼:11111111 11111111 11111111 10000101

          已知補碼求原碼

          最高位如果是 1 的話(負數),那么除了最高位之外的取反,然后加 1 得到原碼。
          最高位如果是 0 的話(正數), 不變,正數的補碼就是它的原碼。
          在計算機系統中,數值一律用補碼來表示和存儲。原因在于,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。此外,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬件電路。(摘自百度百科)

          打個比方:2-1是怎么計算的?

          二進制計算規則采用11得1,10得1,00得0 逢2進1

          計算公式:2-1=2+(-1);

          2 的補碼:00000010

          -1 的補碼:11111111

          -1 的原碼:10000010
          -1 的反碼:11111101

          結果 0 00000001,最高位溢出(0)丟棄, 2-1 = 1。

          關于原碼、反碼和補碼的詳細解釋,可看這篇:

          https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

          為何要使用原碼, 反碼和補碼

          在開始深入學習前, 我的學習建議是先"死記硬背"上面的原碼, 反碼和補碼的表示方式以及計算方法.

          現在我們知道了計算機可以有三種編碼方式表示一個數. 對于正數因為三種編碼方式的結果都相同:

          [+1] = [00000001]原 = [00000001]反 = [00000001]補

          所以不需要過多解釋. 但是對于負數:

          [-1] = [10000001]原 = [11111110]反 = [11111111]補

          可見原碼, 反碼和補碼是完全不同的. 既然原碼才是被人腦直接識別并用于計算表示方式, 為何還會有反碼和補碼呢?

          首先, 因為人腦可以知道第一位是符號位, 在計算的時候我們會根據符號位, 選擇對真值區域的加減. (真值的概念在本文最開頭). 但是對于計算機, 加減乘數已經是最基礎的運算, 要設計的盡量簡單. 計算機辨別"符號位"顯然會讓計算機的基礎電路設計變得十分復雜! 于是人們想出了將符號位也參與運算的方法. 我們知道, 根據運算法則減去一個正數等于加上一個負數, 即: 1-1 = 1 + (-1) = 0 , 所以機器可以只有加法而沒有減法, 這樣計算機運算的設計就更簡單了.

          于是人們開始探索 將符號位參與運算, 并且只保留加法的方法. 首先來看原碼:

          計算十進制的表達式: 1-1=0

          1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2

          如果用原碼表示, 讓符號位也參與計算, 顯然對于減法來說, 結果是不正確的.這也就是為何計算機內部不使用原碼表示一個數.

          為了解決原碼做減法的問題, 出現了反碼:

          計算十進制的表達式: 1-1=0

          1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0

          發現用反碼計算減法, 結果的真值部分是正確的. 而唯一的問題其實就出現在"0"這個特殊的數值上. 雖然人們理解上+0和-0是一樣的, 但是0帶符號是沒有任何意義的. 而且會有[0000 0000]原和[1000 0000]原兩個編碼表示0.

          于是補碼的出現, 解決了0的符號以及兩個編碼的問題:

          1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]補 + [1111 1111]補 = [0000 0000]補=[0000 0000]原

          這樣0用[0000 0000]表示, 而以前出現問題的-0則不存在了.而且可以用[1000 0000]表示-128:

          (-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]補 + [1000 0001]補 = [1000 0000]補

          -1-127的結果應該是-128, 在用補碼運算的結果中, [1000 0000]補 就是-128. 但是注意因為實際上是使用以前的-0的補碼來表示-128, 所以-128并沒有原碼和反碼表示.(對-128的補碼表示[1000 0000]補算出來的原碼是[0000 0000]原, 這是不正確的)

          使用補碼, 不僅僅修復了0的符號以及存在兩個編碼的問題, 而且還能夠多表示一個最低數. 這就是為什么8位二進制, 使用原碼或反碼表示的范圍為[-127, +127], 而使用補碼表示的范圍為[-128, 127].

          因為機器使用補碼, 所以對于編程中常用到的32位int類型, 可以表示范圍是: [-231, 231-1] 因為第一位表示的是符號位.而使用補碼表示時又可以多保存一個最小值.

          補碼的加減法運算

          本文內容參考自王達老師的《深入理解計算機網絡》一書<中國水利水電出版社>

          一、補碼加法:
          1、補碼的加法運算
          兩個機器數相加的補碼可以先通過分別對兩個機器數求補碼,然后再相加得到,在采用補碼形式表示時,進行加法運算可以把符號位和數值位一起進行運算(若符號位有進位,導致了益出,則直接舍棄),結果為兩數之和的補碼形式。
          示例1:求兩個十進制數的和 35+18。
          首先,規定字長是8位,也就是只能用8位二進制表示。
          35的原碼:00100011。
          18的原碼:00010010。
          因為35和18都是正數,所以補碼和原碼完全一致。
          35的補碼:00100011。
          18的補碼:00010010。
          因為補碼是可以連同符號位一起運算,所以運算法則等同于無符號二進制運算:

           00100011---35二進制表示 00010010---18二進制表示 00110101-----轉換成10進制是53。結果正確!

          示例2:求兩個十進制數的和 35+(-18)。
          同示例1一樣,只能用8位表示。
          35的原碼:00100011。
          -18的原碼:10010010。
          因為35是正數,補碼與原碼完全一致,但是-18是負數,補碼需要轉換。
          35的補碼:00100011。
          -18的補碼:由原碼除符號位外取反,再在最低位+1,得到結果是11101110。這時都是補碼,運算規則等同于無符號二進制加法。

             00100011   11101110  100010001---因為前面規定了字長是8位,這里出現了9位,  所以最高位舍棄,舍棄后,結果為00010001,  轉換成十進制是:17。結果正確!(超出字長部分直接舍棄)

          二、補碼減法:
          1、補碼的減法運算
          減法實際上就是加一個負數。運算法則和加法實際上是一致的!
          ————————————————
          版權聲明:本文為CSDN博主「不去上課」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
          原文鏈接:https://blog.csdn.net/ruidianbaihuo/java/article/details/88056298

          標簽:正數的補碼-

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          visualstudio愛心代碼怎么啟動?Visualstudio love代碼啟動方法如下:1.Open the visual studio software.2.單擊文件-新建-項目。3.輸入文件路徑和項目名稱,選擇一個空項目,然后單擊“確定”。4.右鍵單擊源文件,然后單擊添加-新項。5.選擇C文件。6.然后就可以輸入代碼了。7.輸入好的代碼,返回0;在最后;在其前面添加getchar();否...

          臺球裁判薪水多少?臺球裁判的平均年薪應該在10萬歐元左右。臺球裁判的工資也是分等級的,世界級的,國家級的,相差好幾倍!(注:國內外臺球裁判工資換算以歐元計算,與球員一致。這是我個人的看法。)以下是臺球裁判員的選拔程序:臺球裁判從三級裁判開始,達到國際。獲得推薦人 s卡需要國家體育部門審核。獲得臺球裁判的主要條件如下:1.你需要一定的切球經驗,裁判經驗的要求根據裁判的水平不同而不同。想要通過國家二級...

          天津到深圳的機票多少錢?打幾折?一般機票1000元左右。如果是晚上,可能會有300元左右的特價機票。具體來說,你得開一家航空公司。從天津到深圳坐飛機大概多錢?天津到深圳全價1850,全程飛行約3小時10分鐘。北京到深圳全價1750,全程飛行時間和天津一樣。天津機場有到深圳寶安機場的航班嗎?天津機場到深圳寶安機場都有航班。1.天津作為四大直轄市之一,也是重要的進出口城市,而深圳作為社會主義第一示范區...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>