A:
i = 0xF9<<1;
i = i>>1;
P0 = i;
B:
P0 = (0xF9<<1)>>1;
如上A和B两种方式,为什么A可以真正实现移位,而B不可以呢?
------解决方案--------------------
如果编译器够“聪明”,它就不会真的去做 B 中的无效移位。
------解决方案--------------------
去看一下编译出的汇编码就知道了。我猜 P0 = (0xF9<<1)>>3; 也会编译成直接右移 2 位。
------解决方案--------------------
++
------解决方案--------------------
目测你i定义的是无符号型。
对于移位,有算术移位和逻辑移位,编译器会根据数据的类型选择编译成算术移位还是逻辑移位。
对于无符号型,选择逻辑移位,右移后,高位会用0填充,
对于有符号型,选择算术移位,右移后,高位会被填充1.
你的例子中,i应该是定义成了无符号性,而0xf9,默认是有符号型。
------解决方案--------------------
另外,顶一下楼主,上半年还在搞数据库,现在就搞单片机,这覆盖面太广了,敬仰。
------解决方案--------------------
搞数据库的为什么来搞单片机啊
------解决方案--------------------
数据库比较简单写,SQL用较多单片机弄久就懂,