参考博客
http://blog.csdn.net/tandesir/article/details/7385955
【问题描述】在写嵌入式的程序中,常会将数据定义为unsigned int,这样定义有什么好处呢?下面从逻辑右移和算术右移的角度进行分析。
【分析】
1 逻辑右移和算术右移
逻辑右移,移走的位填充为0;算术右移,移走的位填充与符号位有关,例如如果为负数,则移走的位填充为1。
2 unsigned int 和 int
C语言的标准指出,无符号数执行的所有移位操作都是逻辑的,而对于有符号数,采用哪种方式取决于编译器。算术左移和逻辑左移是相同的,而算术右移和逻辑右移,取决于符号位。因此,一个程序如果使用了有符号数,是不可移植的。嵌入式的程序通常采用交叉编译开发,如果定义为有符号的,就无法保证右移操作能跨平台使用,这就是为什么用unsigned int,而不用int的主要原因。
3 算术左移和逻辑左移
算术左移和逻辑左移在移位的时候都是低位补0,如果移动的数据是有符号类型,则有可能正变负,负变正。