BCD壓縮編碼

來源:互聯網
上載者:User

    昨兒的移位元運算被一個C++老鳥給誤導了,不禁懊惱自己電腦群組成原理學的太差了~!不多說了,進入正題!

BCD編碼,百度百科上的定義解釋的我雲裡霧裡的,直接舉例子說吧!

例如整數1和整數9,在電腦裡用二進位存的話java是1個位元組8位2進位數,即:

整數1: 0000 0001

整數9: 0000 1001

為什麼會取1和9這兩個數字呢,因為我們要存數位話,無論多大的數字,每一位都是由0-9構成的,也就是每一位以二進位存的時候,高位都是0,這個就是BCD編碼,有沒有發現其實很浪費?!呵呵是的,浪費了高位的四個0.

如果將高位的四個0去掉,那麼每一個位元組(8位)就可以存進去兩個數字,這樣就會節約了儲存空間,於是,壓縮BCD編碼也就誕生了~!於是上面的兩個數字儲存的時候,就變成了19H 在寫法上,由於沒有超過10,所以十六進位看起來和十進位的表現形式是一樣的,但是不要被誤導了哦~

(但是要說與此同時計算過程複雜度增加了,我還沒有去考證,想來也是以時間換空間的例子吧.)

一般壓縮BCD編碼,都是要預留最高位作為符號位的,

例如我要存 3.14 ,轉成壓縮BCD碼是 03H,14H

如果存-3.14 做法是這樣的: 先將-3.14取絕對值,得到 03H 14H ,首位是0,其二進位表現形式(如今是4位) 0000 ,最高位取反的意思,也就是要將它變成1000 那麼從0000到1000的運算,java裡是用到了或運算,即是拿0|8即可.

    (偶還是菜鳥,難免寫的也會有誤導人的地方,希望不足之處大家予以指正.也不要完全相信我寫的,這個是我自己理解的BCD壓縮碼)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.