2008年09月06日
排他的論理和っす
今日も暑いみたいっすね。
どうもぺんぎんっす( ◎v◎ )
排他的論理和って便利っすよ。
XOR(えくすくるーしぶ・おあ)っす。
ビット演算っす。
integer型のA,B,Cについて
C = A ^ B の結果は
A B C
0 0 0
0 1 1
1 0 1
1 1 0
になるっす。
これを何に使うかというと、スイッチに使うっす。
特に、複数のスイッチを扱う場合に便利っす。
基本形はグローバル変数でswitchを宣言して
if(switch & 0x1)
{
処理;
}
else
{
処理;
}
switch = switch ^ 0x1;
っす。これを応用すると
if(switch & 0x2)
{
処理A;
}
else
{
処理A';
}
switch = switch ^ 0x2;
if(switch & 0x1)
{
処理B;
}
else
{
処理B';
}
switch = switch ^ 0x1;
こんな感じで1つのinteger型変数で複数のスイッチが
可能になるっす。
ビット演算がうまく使えるようになるとカッコイイっす。
どうもぺんぎんっす( ◎v◎ )
排他的論理和って便利っすよ。
XOR(えくすくるーしぶ・おあ)っす。
ビット演算っす。
integer型のA,B,Cについて
C = A ^ B の結果は
A B C
0 0 0
0 1 1
1 0 1
1 1 0
になるっす。
これを何に使うかというと、スイッチに使うっす。
特に、複数のスイッチを扱う場合に便利っす。
基本形はグローバル変数でswitchを宣言して
if(switch & 0x1)
{
処理;
}
else
{
処理;
}
switch = switch ^ 0x1;
っす。これを応用すると
if(switch & 0x2)
{
処理A;
}
else
{
処理A';
}
switch = switch ^ 0x2;
if(switch & 0x1)
{
処理B;
}
else
{
処理B';
}
switch = switch ^ 0x1;
こんな感じで1つのinteger型変数で複数のスイッチが
可能になるっす。
ビット演算がうまく使えるようになるとカッコイイっす。
要はそれぞれのbitについてOn/Offと1/0を対応させてるっす。
あるビットについて、
0とXORしてやるとそのまま返って、
1とXORしてやるとひっくり返るっす。
(上のABCを眺めてみてくださいっす)
たとえば、4つのスイッチを組み込むとして、
1111(2) は16進では0xfっす。
(別にスイッチのビットは隣接させる必要はないっす。
どんな取り方でもいいっす)
右から3つ目のビットをひっくり返すには
0100(2) とXORしてやればいいっす。
0x4 っす。
実際、
A 1111 元の状態
B 0100
C 1011 結果
となってるっす。
この状態(1011(2))から右から2番目のビットをひっくり返すには、
0010(2) とXORしてやればいいっす。
今度は 0x2 っす。
A 1011 元の状態
B 0010
C 1001 結果
土曜日なので頑張って書いたっす。
あるビットについて、
0とXORしてやるとそのまま返って、
1とXORしてやるとひっくり返るっす。
(上のABCを眺めてみてくださいっす)
たとえば、4つのスイッチを組み込むとして、
1111(2) は16進では0xfっす。
(別にスイッチのビットは隣接させる必要はないっす。
どんな取り方でもいいっす)
右から3つ目のビットをひっくり返すには
0100(2) とXORしてやればいいっす。
0x4 っす。
実際、
A 1111 元の状態
B 0100
C 1011 結果
となってるっす。
この状態(1011(2))から右から2番目のビットをひっくり返すには、
0010(2) とXORしてやればいいっす。
今度は 0x2 っす。
A 1011 元の状態
B 0010
C 1001 結果
土曜日なので頑張って書いたっす。
Posted by ぺんぎん at 08:40│Comments(0)
│スクリプト