看到如下位运算语句,请问执行顺序是什么:
// Example program
#include <iostream>
#include <string>
#include <stdio.h>
int main()
{
unsigned int age = 2;
unsigned int agemap = 0x111 ;
if(age > 0 && age <= 32)
{
agemap &= (unsigned int)~((unsigned int)1 << (unsigned int)(age - 1));
}
}
这用于从 agemap(0x111) 中删除 age(value 2),但它是根据什么顺序执行的?
最佳答案
它当然是“基于”C 运算符的优先顺序,就像在任何其他表达式中一样。当然有很多括号,因此您必须考虑到这些。
Wikipedia有一张好 table 。请注意,它很复杂,因为 C 有很多运算符。
基本上,右侧的计算结果为 ~(1 << 1)
,即 ~2
,这是 0xfffffffd 假设一个 32 位 unsigned int
.
关于c - 以下位操作的执行顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28295862/