我是C编程语言的初学者,最近我读过有关Logics的内容。像x >> 1
这样的表达式在C中是否有任何意义?
if (x >> 1) {
printf("%d", x);
}
答案 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
命令。