c语言的左移右移可以用变量吗?C语言右移的规则是这样吗
c语言的左移右移可以用变量吗?C语言右移的规则是这样吗某表达式结果的每一bit代表某事件发生情况, 若表达式未加以约束,则通过右移可能不是 预想的值。往期推荐了解一哈柔性数组C语言中inline函数忽视的sizeof返回值类型
在日常中,左移和右移都经常使用,对于左移而言,其规则是:
高位丢弃,低位补0
但是对于右移而言,其移位规则呢?说到这里,必须先引出两个概念:逻辑移位,算术移位。其具体规则为:
逻辑移位:移出的空位都用0补充
算术移位:对于操作数是无符号型,算术移位等同于逻辑移位;
对于有符号型,算术右移根据符号位填充移出的空位,正数补0,负数补1.
了解了两种移位,明显左移用的是逻辑移位。那么右移用什么规则呢?在C语言中,右移逻辑还是算术移位没有规定,是未定义行为。具体由编译器来决定。目前大部分编译规则是:
有符号数:算术右移
无符号数:逻辑右移
针对这种规则,所以对操作数需要重视,防止类型的问题或者编译器的问题发生不必要的错误。比如:
某表达式结果的每一bit代表某事件发生情况,
若表达式未加以约束,则通过右移可能不是
预想的值。
了解一哈柔性数组
C语言中inline函数
忽视的sizeof返回值类型