c - 以下位操作的执行顺序是什么?

标签 c bitmap bitwise-operators

看到如下位运算语句,请问执行顺序是什么:

// 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/

相关文章:

c - 关于 C 和泛型函数

java - Android 色彩更平滑

android - 如何提高位图质量?

python - Gdk:如何从 Python 中的事件掩码中删除位?

c - 无法正确读取 .bmp 头文件

c - 函数参数地址之间的差异是否总是 4 个字节?

c# - 使用内存映射 View 查看大位图图像

java - Java 中 & 和 && 有什么区别?

c - if (y & (y = 2) 那么如何处理这个if条件

c - IAR 编译器中 "#include"预处理器命令和 "typedef"命令的错误