• 关于BCD码的编码和解码


    (1)BCD码(二到十进制编码)
    人们通常习惯使用十进制数,而计算机内部多采用二进制表示和处理数值数据,
    因此在计算机输入和输出数据时,就要进行由十进制到二进制的转换处理。

    把十进制数的每一位分别写成二进制形式的编码,称为二进制编码的十进制数,
    即二到十进制编码或BCD(Binary Coded Decimal)编码。

    BCD码编码方法很多,通常采用8421编码,这种编码方法最自然简单。
    其方法使用四位二进制数表示一位十进制数,从左到右每一位对应的权分别是
    23、22、21、20,即8、4、2、1。例如十进制数1975的8421码可以这样得出

    1975(D)=0001 1001 0111 0101(BCD)

    用四位二进制表示一位十进制会多出6种状态,这些多余状态码称为BCD码中的非法码。
    BCD码与二进制之间的转换不是直接进行的,
    当需要将BCD码转换成二进制码时,要先将BCD码转换成十进制码,然后再转换成二进制码;
    当需要将二进制转换成BCD码时,要先将二进制转换成十进制码,然后再转换成BCD码。

    编码过程,将数字69进行BCD编码(注:BCD编码低位在前,后面将不再注释)。

    1.       将6,9分别转换成二进制表示:6(00000110)9(00001001),大家可以看到,最大的数字9也只要4个位,在传输过程中白白浪费了4个位;

    2.       将69合并为一个字节,分别取6,9二进制编码的低4位,按照低位在前的原则,将9的低四位放前面6的低四位放后面得出新的字节二进制编码是10010110;

    3.       完成编码过程,69的BCD编码结果为10010110。

    解码过程:将69的BCD码10010110进行解码。

    1.       将10010110的高4位与低4位拆分开,得到两个二进制数1001和0110;

    2.       分别将1001和0110的前面补充4位0000得到两个8位的二进制数00001001,00000110;

    3.       因为编码时低位在前,所以我们将两个二进制数编排顺序为00000110 000010001;


    C#版代码实现:

    int x=97;  ///要对整数97BCD编码
       byte m=(((byte)7)<<4)+(((byte)9));
       //得到的m即为数字97和BCD码字节表现形式

       string bs="";
       bs=(((byte)(m<<4))>>4)).ToString()+"+"+(m>>4).ToString();

      bs即为从BCD码解得的字符串

  • 相关阅读:
    原根
    FFT
    bzoj3991[SDOI2015]寻宝游戏
    bzoj3990[SDOI2015]排序
    序列自动机
    bzoj4032[HEOI2015]最短不公共子串
    2015.8.28 字符串
    bzoj2821作诗
    bzoj2741【FOTILE模拟赛】L
    一个牛人给java初学者的建议
  • 原文地址:https://www.cnblogs.com/chenjq0717/p/2082351.html
Copyright © 2020-2023  润新知