关于sec&0xf的问题
时间:10-02
整理:3721RD
点击:
是这样的,sec代表秒,初值为0,跟随时钟每一秒加1,有句语句我不是很懂
sec&0xf,这句话是不是可以理解成这个十进制的数和16进制数相与了,得到了这个十进制数的16进制表现形式
然后if((sec&0xf)>=0xa)sec+=6;
这样在LCD上就可以显示1到10了
sec&0xf,这句话是不是可以理解成这个十进制的数和16进制数相与了,得到了这个十进制数的16进制表现形式
然后if((sec&0xf)>=0xa)sec+=6;
这样在LCD上就可以显示1到10了
sec&0xf 等价于 sec%16 或者 sec%0x10,你的结论是对的;
从你提供的语句看,你的sec是BCD码格式,即每4位表示一位10进制数;
机器做加法的时候没有专门的BCD加法指令,只能按照二进制格式做加法,所以会出现各位超过9的状况,这样就需要做BCD加法调整;
MCS51就有专门的DA A指令对累加器A做BCD加法调整。