簡體   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