按位移位操作

时间:2014-10-14 01:27:06

标签: c if-statement integer bitwise-operators shift

我正在学习c编程,现在正在努力进行逐位操作。如果我想换短n>>由4和<< 10,并使用短结果作为循环的条件。即if (result==1) {//do something}我需要声明另外两个变量,即short right= n>>4; short left=...还是有更合适的方法来写这个?谢谢!

1 个答案:

答案 0 :(得分:3)

除非您打算多次使用轮班的结果,否则您不需要其他变量。

向右移动4然后向左移动10与向左移动6是不同的,所以如果你想要移过右边的末端的副作用使一些右边的位,例如:

short n = ...;
if (((n >> 4) << 10) == 1) {
    //do something
}

我们假设您从0xFFFF1111111111111111)开始。向右移动4会产生0x0FFF0000111111111111),然后将左移10会产生0xFC001111110000000000)。

另一方面,如果你只向左移6:

short n = ...;
if ((n << 6) == 1) {
    //do something
}

0xFFFF改为0xFFC01111111111000000)。显然不是同一个值。

所以你必须小心你的班次。

顺便说一下,按这些特定值移动将永远不会产生1的结果。