[英]Flags using Bits
我正在尝试对'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,设置位的操作可能有所不同...我正在使用的系统...在这种情况下吗?
您正在切入其他“位”空间。 检查一对夫妇可以给我们:
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。 此方法的主要应用是设置和检查标志,并且没有设置标志肯定显示出独立性。
将您的定义更改为,因为它们以您定义它的方式,其中一些设置了多个位
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位设置。
如果您想全面了解各种黑客技术 ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.