ソラマメブログ
プロフィール
ぺんぎん
ぺんぎん
どもっす( ◎v◎ )
ぺんぎんっす。

「ぺんぎんさん」でいいっす。
「ぺんさん」でもOKっすよ。
何だって良いんっすけどね。
[個体名:Naoya Bellic]
(非商用)
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 1人

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型変数で複数のスイッチが
可能になるっす。
ビット演算がうまく使えるようになるとカッコイイっす。
要はそれぞれの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  結果


土曜日なので頑張って書いたっす。


同じカテゴリー(スクリプト)の記事画像
位置判定っす
同じカテゴリー(スクリプト)の記事
 久しぶりの新関数っす (2011-04-23 23:19)
 11日(土)のオフィスアワーっす (2010-12-10 23:49)
 C#プロジェクトは凍結みたいっす (2010-07-01 22:35)
 4月24日のスクリプターズ・カフェっす (2010-04-27 19:06)
 潜入!1.38サーバーっす (2010-03-09 22:25)
 風の観測で分かったことっす (2009-08-16 22:11)

Posted by ぺんぎん at 08:40│Comments(0)スクリプト
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。