博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于BCD和格雷码
阅读量:2028 次
发布时间:2019-04-28

本文共 1394 字,大约阅读时间需要 4 分钟。

写在前面的体会

1、原来关于keil的DeBug的printf用法,其实并没有像当初写那样麻烦。

只是需要 TI = 1; 再加上 stdio.h 就行了。

2、unsigned long 最大可达42亿,10位

BCD

BCD码,感觉以前没怎么在意,其实用的也最多了。

实际上就是4位二进制数构成0-9的1位十进制数,取值范围0000 ~ 1001。

eg: 十进制的12,8421BCD表示为0001 0010, 而=二进制数为18。

#include 
#include
unsigned char buf[10];void LongToBCD(unsigned long x){ buf[0] = x % 10; buf[1] = x/10 % 10; buf[2] = x/100 % 10; buf[3] = x/1000 % 10; buf[4] = x/10000 % 10; buf[5] = x/100000 % 10; buf[6] = x/1000000 % 10; buf[7] = x/10000000 % 10; buf[8] = x/100000000 % 10; buf[9] = x/1000000000 % 10;}void main(){ unsigned long x = 1234567890; TI = 1; LongToBCD(x); while(1);}

哦,对了。。还有BCD的一个知识点,

一般时钟芯片里面的都是BCD码存储格式,要把对应的BCD码转化成ASCII只需要加上0x30或者,’0’,就可以了。

格雷码

格雷码是一种无权码,可靠性比有权码高!

没有权,换言之就是我们不能一下子看出来等于几了。下面为二进制和格雷码的算法转换思路。(学习一波)

#include 
#include
unsigned long DecToGray(unsigned long x) //十进制数转换为格雷码{ return x^(x>>1);}unsigned long GrayToDec(unsigned long x) //格雷码转换为十进制数{ unsigned long y=x; while(x>>=1) { y ^= x; } return y;}void main(){ unsigned char i; unsigned long x, y; TI = 1; for(i=0; i<100; i++) { x = DecToGray(i); printf("格雷码:%ld ", x); y = GrayToDec(x); printf("十进制:%ld \n", y); } while(1);}

总结一下转换思路:

十进制数转换为格雷码,是十进制对应的二进制数右移一位后,再与自身进行异或运算。


格雷码转换为十进制数为: 格雷码不断右移,然后和自身进行异或运算直到自身右移到0。

转载地址:http://imnaf.baihongyu.com/

你可能感兴趣的文章
javascript call与apply关键字的作用
查看>>
带权重的有向图求最短路径
查看>>
Func<T>、Action<T> 的区别于说明
查看>>
javascript 闭包最简单理解
查看>>
DataTable转List<dynamic>
查看>>
javascript this关键字指向详解
查看>>
IIS7 启用GZip压缩
查看>>
jQuery.fn.extend() 与 jQuery.extend()
查看>>
CSS垂直居中的方法
查看>>
javascript arguments解释,实现可变长参数。
查看>>
FileAccess枚举
查看>>
Asp.net开发常用DOS命令
查看>>
NHibernate二级缓存(第十一篇)
查看>>
jQuery开发经验实例笔记
查看>>
jQuery之AJAX
查看>>
HTML常用字符
查看>>
HTML表单
查看>>
jQuery_基础
查看>>
javascript之尺寸,位置,溢出
查看>>
jQuery工具函数
查看>>