4位二进制数如何转换成十进制数的方法有哪些?

4位二进制数如何转换成十进制数的方法有哪些?,第1张

BCD码使用4位二进制数来表示十进制中0~9这10个数的数码。例如,十进制的237,其BCD码就是 0010_0011_0111 ,但是其二进制是 1110_1101 。

我们先来研究两个4位的BCD码相加的情况。设这两个BCD码对应的十进制是a,b,其中a,b∈{0,1,2,,9}。此时只有3种情况:

也就是说:

第一种情况显然不需要再修正。
第二种情况,例如,5+8=13,我们希望得到BCD码是 0001_0011 ,但是运算结果 1101 ,因此如果我们加上了6,就可以得到正确结果: 1101 + 0110 = 0001_0011 。这是因为,十进制是逢十进一,但是4位BCD加法,在看作是二进制数做加法时,是逢十六进一。因此,如果结果是10≤a+b≤15,加上6以后就是16+0≤a+b+6≤16+5,此时因为逢十六进一的原因,就得到了结果 1_0≤[a+b+6]≤1_5 ,这个结果就是对的。
第三种情况,因为16≤a+b≤18,逢十六进一后,我们得到了 1_0≤[a+b]≤1_2 ,为了使结果正确,如果我们加上一个修正值6,就得到 1_6≤[a+b+6]≤1_8 ,从而结果也变得正确。

综上所述,如果两个BCD码相加:

考虑一个例子,比如 35+99=134。35和99的BCD码分别是 0011_0101 和 1001_1001 。先计算低4位: 0101 + 1001 = 1110 ,因为这个值大于9,因此加上6作为修正: 1110 + 0110 = 1_0100 。现在计算高四位,同时注意到还有一个进位: 0011 + 1001 + 0001 = 1101 ,这个值还是大于9,加上6,得到 1101 + 0110 = 1_0011 。因此最终结果是 1_0011_0100 ,这刚好就是134的BCD码。

我们之所以能够安全地加上进位,是因为BCD加法比照的就是十进制的加法,只不过前者是4位为一个单位,而后者是以1位数字作为一个单位。加上修正值后,BCD加法的进位就相当于十进制加法的进位。图示如下:

给定一个二进制数,要转BCD码。一个常用算法就是不断将该数除以10,以此依次分解出个位、十位、百位……上的数字,这些数字的4位二进制数就是对应的BCD。但是这样的算法需要不断做除法 *** 作十分的麻烦。我们可以使用名为 加三左移法 来完成。

这个算法基于以下的事实:

一个n位二进制数 ,其展开是 如果使用秦九韶算法的嵌套形式写法,可以写成: 或者若令 则 如果使用这种形式,我们先计算的是 ,然后是 ,然后是 ,……,最后是 。

注意到 就是把 左移1位,这样就会在最右边空出一个位,之后再加 就是用 填充这个最低位,从而我们得到了 。不断左移,最终就能得到 ,现在我们来设计一个算法使得左移结束后能得到对应的BCD码。

设 是一个无限长的、初始状态为所有位都是0的理想寄存器, 是欲转换的数。我们使用下面的 归纳法 来构造证明我们通过不断左移最终能够得到存储在 中的 对应的BCD码:

由数学归纳原理,移动 len(h) 次后,我们最终可以得到 的BCD码。

作为一个例子,考虑使用该算法将 的二进制 1000_0110 转为BCD码:

现在, 已经全部移入,此时 的值就是 0001_0011_0100 ,它就是 的BCD码。

C语言的算法如下:

138550221

8421BCD是采用十六进制码来表示十进制数值,高位到低位的权值分别为8,4,2,1,b,c,d只要将每个十六进制码对应的权值相加即得到对应的十进制数。十六进制的8421BCD码转换成十进制是:97。

十六进制:

通常用数字0、1、2、3、4、5、6、7、8、9和字母A、B、C、D、E、F(a、b、c、d、e、f)表示,其中:A~F表示10~15,这些称作十六进制数字。例如十进制数57,在二进制写作111001,在16进制写作39。如今的16进制则普遍应用在计算机领域,这是因为将4个位元(Bit)化成单独的16进制数字不太困难。1字节可以表示成2个连续的16进制数字。可是,这种混合表示法容易令人混淆,因此需要一些字首、字尾或下标来显示。

//bcd hex //此函数用于将8421BCD码转换为十进制数,从函数参数可以看出此BCD码是由两位十进制数组成的。BCD码是用二进制数对十进制数的各个位数进行编码,比如十进制数58,那么转换为BCD码为0x58,356对应BCD码就是0x356。注意这是编码不是数进制间的转换,他们之间不存在等价关系。只是进行编号,为了方便对编号后的数据用十六进制数表示。对应编码规则如下:
十进制数---8421BCD码----编码后用等价的十六进制数表示
0-----------0000----------0x0
1-----------0001----------0x1
2-----------0010----------0x2
3-----------0011----------0x3
4-----------0100----------0x4
5-----------0101----------0x5
6-----------0110----------0x6
7-----------0111----------0x7
8-----------1000----------0x8
9-----------1001----------0x9
知道了编码规则,那么将2位8421bcd码编号的数,还原为十进制数也就方便了。函数参数是一个字节那么决定了此8421BCD码是两位码即高四位是一个码值、低四位是一个码值,将高四位乘以10加上低四位码值就得到了十进制数。

晕哦,bcd一个字节表示能表示从0~99任意一个数字 mov ah,al shr ah,1 shr ah,1 shr ah,1 shr ah,1 and al,0fh 这是把一个字节的bcd转换成2个字节的十进制,
希望采纳

这两个都是只要每个数字一一对应就行了,有,bcd就是把十进制的0-9直接代换,代换,就是能带的带,不能带的就保持不变。0110 0101 1000和1001 1000 1011。

(顺序是:8421BCD码、余3码):

(1)(0)1110100 10100111(整数位首位的 0 可以省略)。

(2)(0)10001010011011(0) (0)1111000001101001(小数位的末位 0 可以省略)。

扩展资料

BCD码与十进制数的转换:

BCD码与十进制数的转换关系很直观,相互转换也很简单,将十进制数754转换为BCD码:7-》0111,5-》0101,4-》0100。

所以拼成8421BCD码的结果是:(0111 01010100)BCD;若将BCD码1000 01010101转换为十进制数:1000-》8,0101-》5,0101-》5所以结果是:(855)D。

注意:同一个8位二进制代码表示的数,当认为它表示的是二进制数和认为它表示的是二进制编码的十进制数时,数值是不相同的。

例如:00011000,当把它视为二进制数时,其值为24;但作为2位BCD码时, 其值为18。

又例如00011100,如将其视为二进制数,其值为28,但不能当成BCD码,因为在8421BCD码中,它是个非法编码 。

8421bcd码转换十进制138550221。

8421BCD是采用十六进制码来表示十进制数值,高位到低位的权值分别为8,4,2,1,b,c,d只要将每个十六进制码对应的权值相加即得到对应的十进制数。十六进制的8421BCD码转换成十进制是:97。

注意:

现在人们日常生活中所不可或离的十进位值制,就是中国的一大发明。至迟在商代时,中国已采用了十进位值制。从现已发现的商代陶文和甲骨文中,可以看到当时已能够用一、二、三、四、五、六、七、八、九、十、百、千、万等十三个数字,记十万以内的任何自然数。

这些记数文字的形状,在后世虽有所变化而成为现在的写法,但记数方法却从没有中断,一直被沿袭,并日趋完善。十进位值制的记数法是古代世界中最先进、科学的记数法,对世界科学和文化的发展有着不可估量的作用。正如李约瑟所说的:“如果没有这种十进位制,就不可能出现我们现在这个统一化的世界了。”


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13256310.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-27
下一篇 2023-06-27

发表评论

登录后才能评论

评论列表(0条)

保存