我正在尝试对'char'变量执行简单的位操作; 我想定义5个常量。
const int a = 0;
const int b = 1;
const int c = 2;
const int d = 3;
const int e = 4;
当我尝试设置多个char的位时,所有位显然都高达设置位读取为set ...这里是我用来设置和读取char var的位的代码:
char var = 0;
var |= c;
var|= d;
BOOL set = false;
if(var & b)
set = true; // reads true
if(var & c)
set = true; // also reads true
if(var & d)
set = true; // also reads true
我读了一个不完整的帖子,说x86设置位的操作可能不同......我正在使用的系统......就是这样的情况吗?
答案 0 :(得分:4)
你正在切入你的其他“位”空间。检查一对夫妇给了我们:
b = 1 = 0001
c = 2 = 0010
d = 3 = 0011 //uh oh, it's b and c put together (ORed)
要解决此问题,请使每个代表一个新的位位置:
const int a = 0; //or 0x0
const int b = 1; //or 0x1
const int c = 2; //or 0x2 or 1 << 1
const int d = 4; //or 0x4 or 1 << 2
const int e = 8; //or 0x8 or 1 << 3
如果可能没有设置位意味着不同的东西,你应该考虑不使用0。这个的主要应用是设置和检查标志,没有标志设置肯定显示独立性。
答案 1 :(得分:3)
将您的定义更改为,因为您已经定义了它们,其中一些定义有多个位
const int a = 1 << 0;
const int b = 1 << 1;
const int c = 1 << 2;
const int d = 1 << 3;
const int e = 1 << 4;
这样很明显,每个常数只有1位设置。
如果您想了解有关various bit hacks ...
的所有信息