快捷搜索:  汽车  科技

c语言的左移右移可以用变量吗?C语言右移的规则是这样吗

c语言的左移右移可以用变量吗?C语言右移的规则是这样吗某表达式结果的每一bit代表某事件发生情况, 若表达式未加以约束,则通过右移可能不是 预想的值。往期推荐了解一哈柔性数组C语言中inline函数忽视的sizeof返回值类型

在日常中,左移和右移都经常使用,对于左移而言,其规则是:

高位丢弃,低位补0

但是对于右移而言,其移位规则呢?说到这里,必须先引出两个概念:逻辑移位,算术移位。其具体规则为:

逻辑移位:移出的空位都用0补充 算术移位:对于操作数是无符号型,算术移位等同于逻辑移位; 对于有符号型,算术右移根据符号位填充移出的空位,正数补0,负数补1.

了解了两种移位,明显左移用的是逻辑移位。那么右移用什么规则呢?在C语言中,右移逻辑还是算术移位没有规定,是未定义行为。具体由编译器来决定。目前大部分编译规则是:

有符号数:算术右移 无符号数:逻辑右移

针对这种规则,所以对操作数需要重视,防止类型的问题或者编译器的问题发生不必要的错误。比如:

某表达式结果的每一bit代表某事件发生情况, 若表达式未加以约束,则通过右移可能不是 预想的值。

c语言的左移右移可以用变量吗?C语言右移的规则是这样吗(1)

往期推荐

了解一哈柔性数组

C语言中inline函数

忽视的sizeof返回值类型

猜您喜欢: