c++ - C++中的按位设置

标签 c++ c

#define OUTGOING_MASK         0x0c
#define OUTGOING_DISABLED     0x04
#define OUTGOING_ENABLED      0x08
#define OUTGOING_AUTO         0x00
#define REFER_SUPPORTED       0x80 

假设 support 是一些 int 类型的值。 我有一个吸气函数

int get()
{
if(OUTGOING_DISABLED == support & OUTGOING_MASK)
return 1;
else if(OUTGOING_ENABLED == support & OUTGOING_MASK)
return 2;
else if(OUTGOING_AUTO == support & OUTGOING_MASK)
return 3;
}

我需要为此编写设置函数,例如

void set(int val)
{
if(val ==1)
//todo
else if(value == 2)
//todo
else if(value == 3)
//todo
}

如何为此编写 getter 和 setter 函数? 我需要在此处获取/设置 support 变量

REFER_SUPPORTED 将始终在support 中设置。

最佳答案

I have a statement such as a1 = b & a2; How to know the value of b using bitwise operators?

您无法恢复 b 的值,除非 a 设置了所有位。 “&”是不可逆的。

解释。 &操作有下表:

a   b   result
1 & 1 = 1
0 & 1 = 0
1 & 0 = 0
0 & 0 = 0

这意味着,要恢复 b,您可以尝试使用下表:

a   result  b
0   0       unknown - could be 1 or 0
0   1       invalid/impossible - could not happen
1   0       0
1   1       1

如您所见,不可能在所有情况下都猜出 b。

在表达式 a & b = c 中,如果知道 c 和 a,则无法恢复 b,因为对于 c 的每个归零位,如果 a 的对应位也为零,则对应的状态有两种可能b的一点点仅当 a 的每一位都设置为 1 时,您才能可靠地恢复 b。

关于c++ - C++中的按位设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3099075/

相关文章:

c++ - VS 2008 中 Qt 4.6 的问题

c++ - 奇怪的编译器错误 : "undefined reference to ' main'"

c - 为什么函数在读取值和实现图形时会崩溃?

c - 为什么我会收到此错误以及如何修复它 : munmap_chunk(): invalid pointer: 0x0000000000400694 *** Hello WorldAborted

代码运行,但说无效

c - 如何在二进制 gtk 应用程序中嵌入 `.ui` 文件?

c++ - Stroustrup 计算器生成 NaN 而不是预期值

c++ - 方法,调用所有基类的同名方法(如果存在)并将返回值保存到列表中

c++ - 转换后是右值还是左值

c - gfortran debugging with gdb : w_powf. c: 没有那个文件或目录