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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

移码补码原理

發布時間:2024/1/1 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 移码补码原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

計算機中的“數”,花樣很多,又是ASCII碼、又是BCD碼等等,下面,做而論道寫了一些關于移碼、補碼的一些看法,歡迎拍磚。

機器數

計算機中的“數”,其實都不是數字,它們都是一些高、低電平。
其中,高電平為3.2~5.0V,記為1,低電平為0~0.3V,記為0。
這些1、0,顯然都不應該稱為“數”,應該稱為“數碼”,稱為“機器數”更合適一些。

用8位“數碼”,可以形成0000 0000 ~ 1111 1111 共 256 種不同的組合,用16進制表示就更簡練一些,把它們像數字一樣寫在一個數軸上,如下圖所示:

?


無符號數

用這些“機器數”代表人們常用的“數字”,還是很容易理解的,特別是無符號數 0 ~ 255,不用經過任何變換,直接對應就可以了,如下圖所示:

?


有符號數

但是,用“機器數”代表“有符號數”,就要費些心思了,這也是被人弄的很濫的部分。

8位二進制數共有 256 種組合,可以用 128 個代表負數,用128 個代表零和正數,那么“有符號數”的范圍就是:-128 ~ -1 、0 ~ +127,畫在數軸上如下所示:

?

?

移碼

最簡單的代表方式是“移碼”。

“移碼”就是把所有的數字都加上 128,也就是把 -128 ~ +127 的范圍的數字,都平移到 0 ~ 255 范圍內,然后再用 0 ~ 255 的“機器數”來表示。

當有符號數和機器數的對應關系如下圖時,這就是“移碼”:
?

?

顯而易見,機器數0 ~ 127 代表負數 -128 ~ -1,機器數128 ~ 255 代表 0 ~ 127。所有的數字都右移了128,大概這就是“移碼”名稱的來源吧。

已知一個數 X,其 8 位字長的移碼定義為:

    [X]移 = 128 + X??????????????? -128 ?<= ?X? <=? 127

有興趣的讀者可以去查看計算機類的書籍,從中可以找到這個式子。

移碼,應用的場合還是很多的。多數AD轉換器產生的數字,就是用移碼表示采樣數據的。另外在浮點數中,也有應用。

?

補碼

移碼雖然解決了表示負數的難題,但是它是把全部數字都向右邊移動了 128,正數也都變大了,這就不方便進行數字的計算。
為此,有人提出了“補碼”的表示方式,即零和正數不用移動,只是把負數向右移動 256 個位置。

關于補碼的由來,可見:
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/d92cc986c2a1523bc75cc380.html

下圖就是補碼中負數和機器數的對應關系:
?


下圖又加上了正數和機器數的對應關系:
?

?

可見,機器數0 ~ 127 代表零和正數0 ~ 127,機器數128 ~ 255 代表負數 -128 ~ -1。

已知一個數 X,其 8 位字長的補碼定義為:

      /? X??????????????????    ???????      0? <=? X? <= ?+127 ;0和正數不用變化
? [X]補 = |
      \ 2 ^ 8 -| X | ? = ? 256??+ ?X??      -128 <= X < 0 ;負數就加256

有興趣的讀者可以去查看計算機類的書籍,從中也可以找到這個式子。

從定義式求一個數的補碼是非常容易的:是正數就直接變成二進制,是負數先加上256(就變成128~255了)再變成二進制就完了。

補碼和移碼的互換

從前面的示意圖中可以看出,在移碼、補碼中,僅僅是正數、負數交換了位置,而正數、負數中數字的次序并沒有變。

因為機器數0 ~ 127 的最高位都是0,機器數128 ~ 255 的最高位都是1,只要把這最高位變化一下,補碼就可以變成移碼,同樣,移碼也可以由此變成補碼。

<div class="person-messagebox"><div class="left-message"><a href="https://blog.csdn.net/baidu_33836580"><img src="https://profile.csdnimg.cn/B/8/D/3_baidu_33836580" class="avatar_pic" username="baidu_33836580"></a></div><div class="middle-message"><div class="title"><span class="tit "><a href="https://blog.csdn.net/baidu_33836580" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;,&quot;ab&quot;:&quot;new&quot;}" target="_blank">baidu_知道</a></span><!-- 等級,level --><img class="identity-icon" src="https://csdnimg.cn/identity/blog7.png"> </div><div class="text"><span>原創文章 532</span><span>獲贊 404</span><span>訪問量 144萬+</span></div></div><div class="right-message"><a class="btn btn-sm attented bt-button personal-watch" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;,&quot;ab&quot;:&quot;new&quot;}">已關注</a><a href="https://im.csdn.net/im/main.html?userName=baidu_33836580" target="_blank" class="btn btn-sm bt-button personal-letter">私信</a></div></div></div>

總結

以上是生活随笔為你收集整理的移码补码原理的全部內容,希望文章能夠幫你解決所遇到的問題。

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