bcd转10进制c语言

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

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语言的算法如下:

bcd转10进制c语言

c语言bcd码转十进制

不知道我的理解对不对,这个问题,就是把一个整数还原成16进制数的表示方式,而这个十六进制数实际上表示的就是十进制数,所以我们只要把输入的数转换成十六进制表示就行了,但是有一个问题,其实需要注意的就是输入的时候10-15

其实是不能输入了,因为刚好就是A-F,所以不妨让输入值=16

=15

对于这个范围的数

其实只要两步就行了,第一,除以16取余数,对应的是各位上的数,除以16取整数商,对应的就是十位数,应该这样就可以

void

main(){

int

a;

cina;

if(a16||a153)cout”不符合输入规则”endl;

else{

int

c=a%16;

int

b=a/16;

int

abc=

b*10+c;

coutabcendl;

}

}

c语言程序 自定义函数实现:二进制转换为十进制。

先定符号负数先弄个负号,然后可以用Ascii码或BCD码表示十进制,ASCII码除以10用余数转成字符完成后加结束符,然后翻转字符串!BCD每字节两位10进数,方法一样。正常计算机内所有数据,都以二进制表系,如果是字符串二进制,先转成计算机内的二进制表示,再转10进制好了!

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月26日 17:29:09
下一篇 2024年3月26日 17:36:19

相关推荐

  • c语言10进制转换16,c语言10进制转换成2进制代码

    用c语言编写函数,将输入的十进制数转换成十六进制数并输出 1、首先在桌面上,点击“Microsoft Visual Studio 2010”图标。然后在该界面中,先定义栈最大的存储空间。其次在该界面中,编写初始化空栈函数代码。之后在该界面中,编写判断空栈函数代码。 2、怎么这么多人问这个问题。。 前天刚好写了一个,是用的栈,希望能帮到你。。 3、利用系统函数…

    2024年5月18日
    3500
  • c语言不用按回车直接接受字符,c语言输入数据不回车直接执行

    C语言怎么输入数字而不用按回车就可以读取数据 使用getch()直接从输入缓冲区中读取一个字符。 你可以用getch();函数。这个函数与getchar()函数类似。但是getch()函数是不用按ENTER键来输入的。 scanf(%c, &c);这种方法和输入数字是类似的,%c仅读入一个字符,并赋值给c。2 c = getchar();getcha…

    2024年5月18日
    4400
  • c语言的链表是什么意思,c语言链表知识点总结

    c语言中的链表是什么? 1、链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。 2、就是一连续内存空间,类似于数组,不过数组的内存空间一旦初始化就是不变的。链表开始是一个“头指针”,定义了链表开始的位置,下面是像链条一样的一串节…

    2024年5月18日
    6100
  • c语言位16位,c语言 16位

    7、在C语言中(以16位PC机为例),5种基本数据类型的存储空间长度的排列… 无符号长整形:unsigned long int 4个字节 单精度 float 4个字节 有效数字7位 双精度 double 8个字节 有效数字16位 字符型 char 1个字节 以上是在16位计算机系统中,32位的加倍。 short、int、long、char、flo…

    2024年5月18日
    4000
  • 黑客需要学习的语言,黑客要学什么语言

    想控制别人电脑的黑客学什么语言 1、Python和Java容易成黑客入门时的首选。C/C++是黑客在学习编程过程中必然会接触到的,C++是以C为基础的改进版。黑客要想精通C/C++是有一定难度的。Perl和LISP能帮助黑客拓宽编程的知识面,增加编程的经验。 2、如果要做一个有技术含量的黑客的话,汇编肯定是要学的,需要用它分析一些木马病毒的运作方式,加解密的…

    2024年5月18日
    7400
  • c语言拼写检查,c语言注释中的拼写错误

    用什么软件进行C语言编程可以检测错误的内容? :PhpStorm是一个专业轻量级且便捷的PHP IDE,旨在提供了用户效率,可深刻理解用户的编码,提供智能的代码补全,快速导航以及即时错误检查等等强大的功能。 大学c语言搜题app。大学c语言搜题app原名叫做菜鸟学C语言是一款非常好用的学习c语言的手机软件 软件功能 选择题:按照考点分类的选择题习题,并有答案…

    2024年5月18日
    2900
  • c语言n和*n,c语言\n有什么用

    C语言中:n+=n-=n*n怎么算??? 1、从右向左计算,因此先计算-=运算符,即n-=n*n,即n=n-n*n=2-4=-2;然后计算+=运算符即n+=n,即n=n+n;因为这时n=-2所以n=-2-2=-4;结果n的值为-4。 2、c语言中,n+=表达的意思是:将n加上后面的值,然后把结果赋值给n。例如,如果n=5,那么n+=3就相当于n=n+3,也就…

    2024年5月18日
    3900
  • c语言中代表逻辑真,c语言中代表逻辑真实的数据

    C语言中逻辑表达式和关系表达式的值为真时,到底是用非0的任何数表示还… 1、C语言中逻辑“真”用非零数表示。例如:程序在运行中将二个表达式的值分别赋值给变量a和b。因为105是假,b代表假的值,最终输出 b=0,所以0表示假。因为5 == 5是真,a代表真的值,最终输出a=0,所以1表示真。 2、在C语言中非0的数代表逻辑值“真”,一般用用数字1…

    2024年5月18日
    3500
  • c语言怎么操作内存,c语言内存超限怎么解决啊

    C语言怎么直接使用寄存器和内存 1、恐怕只能内嵌汇编了。但是不建议在C语言的程序中直接访问寄存器。很容易导致程序出错。一般 内嵌单条语句可以使用asm();如:asm(nop);有些MCU支持asm();内嵌复合语句。有些不支持。 2、C语言由CPU运行(实际上是先编译成机器码存在芯片里面然后执行),可以去操作内存。 内存里有一段是跟寄存器相对应的,而寄存器…

    2024年5月18日
    4000
  • c语言数组存大数字,c语言数组内存大小

    c语言中超大数如何存储 1、C语言的系统类型,均有大小的限制。超出这个存储范围,就无法用该类型进行存储。所以需要根据数据规模,来选择存储类型。 2、大数处理一般就两种方式,一种是整型的方式,保存绝对准确值 在不出现溢出时,运算结果完全准确。当范围超过最大整型范围时,就需要用数组了 另外一种就是浮点数的方式,通过保存底数和指数的方式,以一定精度表示近似值。 3…

    2024年5月18日
    3900

发表回复

登录后才能评论



关注微信