比如12+5
我想应该是先把12和5先转换成BCD编码
12为(0001 0010)
5为(0101)
然后怎么加?

解决方案 »

  1.   

    http://wenku.baidu.com/view/61e623d7360cba1aa811da9f.html参考
      

  2.   

    计算机只有01,BCD码就是用01来表示十进制数
      

  3.   


    比如说,12转换到BCD编码是0001 0010,但是转换到二进制是1100我不知道BCD编码和二进制有什么关系,好像两个完全不同的数
      

  4.   

    要看你从什么层次去解释这个问题。从数字电路的角度看,加法是由全加器和半加器组成的,而全加器、半加器本身是由或门、异或门、与门等组成的。
    门电路的实现是半导体的性质决定的。从指令一级来说,加法是由加法指令、进位指令、数据存储指令实现的。比如对于x86处理器,它可以实现一个两操作数的指令,add
    add eax, ebx;表示把eax和ebx的指令相加,保存在eax里面。同时如果有进位、溢出,会设置eflag寄存器。从代数的角度说,你需要把十进制转化为二进制,你需要使用补码、反码。
      

  5.   

    简单地介绍下半加器,我们首先可以得到半加器的真值表:
    a b sum carry
    0 0 0   0 (0 + 0 = 0)
    0 1 1   0 (0 + 1 = 1)
    1 0 1   0 (1 + 0 = 1)
    1 1 0   1 (1 + 1 = 10)
    sum = a 异或 b,也就是相等为0,不等为1。
    carry = a and b,用了一个与门。
    这是1位加法。
    我们可以在此基础上构造多位加法,这就需要全加器:
    a b carry(上一位的进位) sum carry
    0 0 0 0 0 
    0 0 1 1 0
    0 1 0 1 0
    0 1 1 0 1
    1 0 0 1 0
    1 0 1 0 1
    1 1 0 0 1
    1 1 1 1 1
    具体实现你可以自己思考下。
      

  6.   

    另外我想说的是,如果你使用C++/C#
    编写如下源代码:
    int x = 12 + 5;
    不考虑编译器优化,
    那么实际上,编译器产生的程序中的12和5已经是二进制了,而不是BCD。
      

  7.   

    至于十进制转换为2进制,简单说下原理,就是除以2取得余数,比如
    12 / 2 = 6 mod 0
    6 / 2 = 3 mod 0
    3 / 2 = 1 mod 1
    1 / 2 = 0 mod 1
    所以12就是1100
      

  8.   


    那BCD到底有什么用呢?我就是纳闷这个BCD到底有什么作用,举个例子行吗?
      

  9.   

    BCD就是用二进制表示的十进制而已,没有什么用。其实我们经常用一种编码表示另一种编码,比如你可以认为我们写的二进制其实是"DCB",只使用十进制的01表示二进制。再比如,我们可以认为ASCII表其实是256进制编码出来的文字。
      

  10.   

    关于编码,推荐你看一本书:
    http://book.douban.com/subject/4822685/
    很浅显易懂。