thi*_*ool 1 c bit-manipulation
例:
Operation 1:
d= c | y | z | a<<3 | b <<3 | x;
Operation 2:
m = c|y|z|x;
d = m | a<<3 | b<<3;
Run Code Online (Sandbox Code Playgroud)
操作1和操作2在C中产生相同的结果吗?
要回答标题中的问题:
leftshift和OR运算符是否可以在C中交换?
在|按位或运算符是可交换的,但<<算不算(a<<3和3<<a有很大的不同).
但是,这似乎不是你要问的问题.要回答你问题的主体,因为它<<具有更高的优先级|(即,<<更紧密地绑定),你可以想到a<<3并且b<<3好像它们是主要或带括号的表达式.实际上,您有多个由|运算符连接的子表达式.重新排列它们应该没有效果; 你的两个代码片段的行为应该相同(除了第二个代码片段存储了一个值m,在你的第一个片段中不存在).
这假设您使用的所有变量属于同一类型.如果它们不存在,则存储中间值m可能涉及可能改变结果的转换.这可能不适用于您的情况,但由于您没有向我们展示任何声明,因此无法确定这一点.