数据的二进制表示和位运算(算数&逻辑)

在写嵌入式的程序中,常会将数据定义为unsigned int,这样定义有什么好处呢?下面从逻辑右移和算术右移的角度进行分析。

【分析】

1 逻辑右移和算术右移

逻辑右移,移走的位填充为0;算术右移,移走的位填充与符号位有关,例如如果为负数,则移走的位填充为1。

2 unsigned int 和 int

C语言的标准指出,无符号数执行的所有移位操作都是逻辑的,而对于有符号数,采用哪种方式取决于编译器。算术左移和逻辑左移是相同的,而算术右移和逻辑右移,取决于符号位。因此,一个程序如果使用了有符号数,是不可移植的。嵌入式的程序通常采用交叉编译开发,如果定义为有符号的,就无法保证右移操作能跨平台使用,这就是为什么用unsigned int,而不用int的主要原因。

原文地址:https://www.cnblogs.com/CreatorKou/p/8697318.html