我正在学习c编程,现在正在努力进行逐位操作。如果我想换短n>>由4和<< 10,并使用短结果作为循环的条件。即if (result==1) {//do something}
我需要声明另外两个变量,即short right= n>>4; short left=...
还是有更合适的方法来写这个?谢谢!
答案 0 :(得分:3)
除非您打算多次使用轮班的结果,否则您不需要其他变量。
向右移动4然后向左移动10与向左移动6是不同的,所以如果你想要移过右边的末端的副作用使一些右边的位,例如:
short n = ...;
if (((n >> 4) << 10) == 1) {
//do something
}
我们假设您从0xFFFF
(1111111111111111
)开始。向右移动4会产生0x0FFF
(0000111111111111
),然后将左移10会产生0xFC00
(1111110000000000
)。
另一方面,如果你只向左移6:
short n = ...;
if ((n << 6) == 1) {
//do something
}
0xFFFF
改为0xFFC0
(1111111111000000
)。显然不是同一个值。
所以你必须小心你的班次。
顺便说一下,按这些特定值移动将永远不会产生1的结果。