zoukankan      html  css  js  c++  java
  • BCD压缩编码

        昨儿的移位运算被一个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压缩码)

  • 相关阅读:
    bootStrap-treeview插件
    UML常用图的几种关系的总结
    RFC中文文档
    继承:重新使用接口
    Java8向后兼容
    Java8 时间调节器
    Java8 ChronoUnits枚举
    BigDecimal.divide方法
    java.lang.Double.byteValue() 方法
    事件处理是什么?
  • 原文地址:https://www.cnblogs.com/miya2012/p/2439934.html
Copyright © 2011-2022 走看看