是>>在C中有什么意义?

时间:2016-10-01 18:11:56

标签: c conditional-statements

我是C编程语言的初学者,最近我读过有关Logics的内容。像x >> 1这样的表达式在C中是否有任何意义?

if (x >> 1) {
    printf("%d", x);
}

1 个答案:

答案 0 :(得分:1)

>>运算符是右移运算符。它取左侧的值,并将每个位shitfs右侧的位数。

例如,如果变量的二进制值为00110(6),则向右移1会产生00011(3)。同样,将01001(9)右移2会产生00010(2)。因此,对于无符号整数值,它实际上除以2舍入的幂。

如果>>的左操作数是有符号整数且值为负,则结果为实现定义(当前C standard的6.5.7节)。在使用2的补码表示负数的大多数常见桌面实现中,在这种情况下,1位将从左侧移入以保留变量的符号。

因此11111011作为有符号值(-5)右移1会导致11111101( - 3)。与正值的情况一样,这有效地除以2向下舍入的幂。

在给出的示例中,变量x向右移动1.然后在布尔上下文中计算该表达式的值,这意味着检查它是否为零。如果结果值不为零,则执行printf命令。