单片机学习--c语言中的右移位运算

移位操作:简单的把一个值的位向左或向右移动。在左移过程中,值最左边的几位被丢弃,右边多出来的几个空位则由0补齐。


右移操作:却面临着一个左移操作没有的问题。从左边移入新值时,可以选择两种方案

                1、逻辑移位,左边移入的用0填充。

                2、算术移位,左边移入的位由原先该值的符号位决定,符号位为1则填充1,符号位为0则填充0

          原值:10010110                逻辑移位后:00100101   算术移位:11100101


warning:无符号值的所有移位操作,都是逻辑移位。  对于有符号值得移位操作采用哪种方法,就要根据你所使用得编译器来解决。   一个程序如果出现了有符号数得右移操作,它就是不可移植的。

a<<-5   不是表示右移5位。在某个机器上,这个表达式实际执行了左移27位的操作。

          对于这些未定义 | 移位的操作比操作的位数还要多的情况,    具体效果都是根据编译器来定的。它们的结果也很可能不可预测。所以应该避免使用这种操作

                        

相关推荐