C言語でフラグのビット反転

投稿者: | 2015/11/27 金曜日

XOR演算子 ^ を使う
この演算子はビットごとのXORを返す。

命題 P 命題 Q PQ
enum {
	AAA = 1 << 0,
	BBB = 1 << 1,
	CCC = 1 << 2,
	DDD = 1 << 3,
	EEE = 1 << 4,
	FFF = 1 << 5,
};
 
int _tmain(int argc, _TCHAR* argv[])
{
	int i = 0;
	i ^= AAA;  // -> 1
	i ^= AAA;  // -> 0
 
	i ^= BBB;  // -> 2
	i ^= BBB;  // -> 0
 
	i ^= CCC;  // ->4
	i ^= CCC;  // ->0
 
	i ^= FFF;  // ->32
	i ^= FFF;  // ->0
 
 
 
	i = 100;  // = 1100100
	i ^= AAA;  // -> 101
	i ^= AAA;  // -> 100
 
	i ^= BBB;  // -> 102
	i ^= BBB;  // -> 100
 
	i ^= CCC;  // ->96
	i ^= CCC;  // ->100
 
	i ^= FFF;  // ->68
	i ^= FFF;  // ->100
 
 
	i = 1000;  // = 1111101000
	i ^= AAA;  // -> 1001
	i ^= AAA;  // -> 1000
 
	i ^= BBB;  // -> 1002
	i ^= BBB;  // -> 1000
 
	i ^= CCC;  // ->1004
	i ^= CCC;  // ->1000
 
	i ^= FFF;  // ->968
	i ^= FFF;  // ->1000
 
 
	i = 255;  // = 11111111
	i ^= AAA;  // -> 254
	i ^= AAA;  // -> 255
 
	i ^= BBB;  // -> 253
	i ^= BBB;  // -> 255
 
	i ^= CCC;  // ->251
	i ^= CCC;  // ->255
 
	i ^= FFF;  // ->223
	i ^= FFF;  // ->255
 
	return 0;
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です