51单片机红外线解码的程序

2025-01-07 01:47:31
推荐回答(1个)
回答1:

实际上如果ir_code[2]是8位二进制数的话 ir_code[2]/16,结果就只剩低4 位有效了
再进行&0x0f;还是取低4位没意义了 如 0XA8/16=0X0A 0X0A &0x0f=0X0A
ir_code[2]&0x0f有意义 是 将高4位清0只取低4位
估计你的表格里只有16个七段码 因此查表时只能对高4位和低4位(都不大于15)分别处理和显示
/16和数学的除法相似,不过只取整数部分,不理会余数 如 15/16=0 17/16=1 18/16=1
32/16=2 35/16=2
0x0f化成二进制是 0000 1111 另一个二进制数xxxx xxxx和它相“与” 则高4位全为0
低4位不变,即(xxxx xxxx)&(0000 1111 )=0000 xxxx
另外,/2相当于把这个二进制数向右移1 位(高位补0)
/4相当于把这个二进制数向右移2 位
/16相当于把这个二进制数向右移4 位,原来的高4位就跑到了现在的低4 位上,现在高4 位就全成了0
所以C 语言中常见>>4 >>8 和/16 /256是等价的