求C语言高手解释
BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都...
BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了,求对上述文字解释
展开
4个回答
展开全部
追问
那么 就是说,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(部分大小写),其他进制不能省。
展开全部
#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;}//清除计数值
}
}
求采纳为满意回答。
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数都当作二进制数转换成十进制输出了。)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
0x12 在BCD数里面代表十进制的12
在计算机里面是十进制数18在十六进制下的表示
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的提问有错误,0x不表示2进制
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询