忘记是在哪儿看到这么个语句:
bit sda;
unsigned char m_addr;
sda = (bit)(m_addr&0x80);
虽然知道结果,不过 8 位 的二进制数和 10000000与运算之后是怎么变成 1 个位的?
看了(keil的)汇编,晕死了:
bit sda;
unsigned char m_addr;
195: SDA = (bit)(m_addr&0x80);
196:
C:0x0119 E514 MOV A,m_addr(0x14)
C:0x011B 33 RLC A
C:0x011C 9291 MOV sda(0x20.0), C
感情只做了一次左移,然后取进位位。
不过下面的处理方式与上面的还不一样。。看来这个是一般的处理,上面那个是简化的。
196: sda = (bit)(m_addr);
197:
C:0x00FA E514 MOV A, m_addr(0x14)
C:0x00FC 24FF ADD A, #0xFF
C:0x00FE 9200 MOV sda(0x20.0), C
只要被强制运算的 m_addr > 0,结果就是 1,否则就是0。非常有用!!!
好算明白了。。。 [cy]
没有评论:
发表评论