繁体   English   中英

使用位的标志

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM