求C语言高手解释

BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都... BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了,求对上述文字解释 展开
 我来答
markguan3
推荐于2016-10-26 · 超过16用户采纳过TA的回答
知道答主
回答量:40
采纳率:0%
帮助的人:26.7万
展开全部
BCD是计算机表示十进制的方法,0~9分别对应0000~1001(8421码),0000~1001表示为十六进制就是0x0~0x9
十进制12表示为BCD为0001 0010(二进制),表示为十六进制就是0X12;
小明误以为这是二进制数,所以00010010(二进制)=18(十进制)。其实0001和0010应该是种编码,每四位表示一个数码。
追问
那么 就是说,BCD与2进制是两种并列的方法,且BCD中4位表示1个数位,那0x是一种表示16进制的固定方法吗,有没有套路,不好意思菜鸟求解释
追答
计算机中只有0和1。在表示数值时计算机用2进制表示,但是人看着不舒服,就用信息量更大的16进制表示,同时16进制和2进制之间的转化非常方便,4位2进制变一位16进制即可。这两种是表示方法,跟编码无关,是最基本的。
因为人们日常习惯10进制,所以需要方便的将10进制数表示出来(或者输入),所以需要约定一种表达方式,用四位二进制数表示一位十进制数,这是我们规定的方式。
至于0B,0X,0Q,0D等,则是书面上区分不同进制的数而规定的。比如0010,如果是0B0010,那么就等于2,如果是0x0010,就等于16。根据规定,只有十进制时可以省略0d(部分大小写),其他进制不能省。
一鸣FMol85
2014-06-22 · 超过65用户采纳过TA的回答
知道答主
回答量:124
采纳率:0%
帮助的人:125万
展开全部
#include<reg51.h>
sbit L1=P3^0; //定义数码管阳级控制脚(千位)
sbit L2=P3^1; //定义数码管阳级控制脚(百位)
sbit L3=P3^2; //定义数码管阳级控制脚(十位)
sbit L4=P3^3; //定义数码管阳级控制脚(个位)
sbit key1=P1^7; //暂停,开始
sbit key2=P1^6; //清零
unsigned long int ti_10ms=0; //置变量初值为0
unsigned char seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管0-9段
//----------延迟------------
void delay()
{
unsigned int i=100;//定义变量i,初始值100
while(i--);//直到i减到0退出此函数
}
//-----------定时器-----------
void ds0() interrupt 1
{
//每次定时器计数溢出触发此中断
TH0=(65536-10000)/256;//设定定时器高8位初值为216
TL0=(65536-10000)%256;//设定定时器低8位初值为216
ti_10ms++; //10ms计数变量增1
if(ti_10ms>=9999)//如果10ms计数变量达到9999
{ti_10ms=0;}//清零
}
//------------主程序--------
void main()
{
//--------定时器初始化---------
TH0=(65536-10000)/256;//设定定时器高8位初值为216
TL0=(65536-10000)%256;//设定定时器高8位初值为216
EA=1;//开启中断
ET0=1;//开启定时器0
PT0=1;//定时器0中断优先级设为高
TR0=0;//定时器计数关闭,不计数
TMOD=0x01; //计时模式为16为计数器
//------循环-------
while(1)
{
if(key1==0)//如果key1=0(被按下)
{TR0=~TR0;while(key1==0);}//开启(或关闭)定时器0,然后等待按键抬起(如果按下就一直等)。
P2=seg[ti_10ms%10000/1000]; L1=0;delay();L1=1;//设置数码管1,千位
P2=seg[ti_10ms%1000/100]+0x80; L2=0;delay();L2=1;//设置数码管2,百位,同时点亮数码管的那个"."
P2=seg[ti_10ms%100/10]; L3=0;delay();L3=1;//设置数码管3,十位
P2=seg[ti_10ms%10]; L4=0;delay();L4=1;//设置数码管4,个位
if(key2==0)//如果key2=0(被按下)
{ti_10ms=0;}//清除计数值
}
}
求采纳为满意回答。
追问
膜拜,本人为门外汉,能否通俗一点,谢谢!(重点:所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
porker2008
2014-06-22 · TA获得超过1.4万个赞
知道大有可为答主
回答量:7066
采纳率:62%
帮助的人:1.1亿
展开全部
0x12 在BCD数里面代表十进制的12
在计算机里面是十进制数18在十六进制下的表示
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8c7d112
2014-06-22
知道答主
回答量:31
采纳率:0%
帮助的人:12.7万
展开全部
你的提问有错误,0x不表示2进制
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式