2008年7月27日星期日

(bit)强制转换。

忘记是在哪儿看到这么个语句:
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]

没有评论: