0

'char'変数に対して単純なビット演算を実行しようとしています。5つの定数を定義したいと思います。

const int a = 0;
const int b = 1;
const int c = 2;
const int d = 3;
const int e = 4;

charの複数のビットを設定しようとすると、明らかにsetビットまでのすべてのビットがsetとして読み取られます...これは、charvarのビットを設定および読み取るために使用するコードです。

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ではビットを設定する操作が異なる可能性があるという不完全なスレッドを読みました...使用しているシステム...ここではそうですか?

4

2 に答える 2

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を使用しないことを検討する必要があります。このための主なアプリケーションは、フラグを設定およびチェックすることであり、設定されたフラグがないことは、確実に独立性を示します。

于 2012-07-24T04:09:39.587 に答える
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ビットしか設定されていないことが明らかです。

さまざまなビットハックについてすべて学びたい場合...

于 2012-07-24T04:10:10.643 に答える