FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
line

一つの変数に二つの値を入れる

プログラム全文はこちら


ちょっとした小技の一つだと思ってます
タイトル通り一つの変数に二つの値を入れることができます、しかしその大きさは0~15までです
しょぼいように見えて実は使えます

ゲームに使用するならブロック崩しとかですかね
本来ならブロックのオブジェクトを作る時に種類(type)と耐久力(life)を変数として使用する場合、char型で宣言したとしても1byte+1byte、30ブロック作るとしたら2byte * 30=60byte使うことになったりします


しかしこの小技を使うとtypeとlifeを一緒にすることができ、1byteで済ます事が出来ます

まぁ30ブロック程度じゃふーん程度しか思いませんが1000ブロックとかあったら本来2000byte使うところを半分に減らす事が出来るってすごいです

ってのは本当に雑談


この小技は配列に16進数を入れることが重要です、サンプルのプログラムでは

unsigned char index[4];という配列の中に
index[0]=0x69;
index[1]=0x91;
index[2]=0x35;
index[3]=0xF1;

という感じに入ってます。この0x69とか0x91とかの数字そのものは別にどうでもいいです
問題なのは0x69の6と9にあります、今回はこれを分けて使用することで2つの値を得ることが可能になります


説明に使用するのは[0]の0x69を使用します、最初に左の6の部分を抜き取ってみます
まずは[0]を2進数にしてみます
index[0]=0x01101001

ここで欲しいのは左の6の部分、つまり0x01101001の部分です
そのためには右の0x01101001は不要となります
そこで、論理積を利用して右半分を全て0にしてみます
ans=index[0] & 0xF0;

これで0x01100000となります、しかしこのまま普通に代入したりすると96という値が返ってきたりします

そうしないために右に4ビットシフトします(シフト演算使用)

index[0]=0x01100000 >> 4(右に4ビットシフト) -> 0x0110


これで代入することで期待通りの6という値を得ることができます


ちなみに右端の1001の値、つまり9を得たい場合は先ほどと同じように論理積で左側を0にしてください
index[0] & 0xF0;

こうすることでindex[0]=0x00001001、つまり0x1001、つまり9という値が得られるわけですね


これを使うにはシフト演算や論理積とかを理解してないと使いずらいかもしれません

スポンサーサイト
line
line

comment

管理者にだけ表示を許可する

line
line

FC2Ad

line
プロフィール

否健康食品オワタ

Author:否健康食品オワタ
27.142.178.77 (1)
27.142.178.77 (2)

2714217877.gif

line
最新記事
line
最新コメント
line
最新トラックバック
line
月別アーカイブ
line
カテゴリ
line
検索フォーム
line
RSSリンクの表示
line
リンク
line
ブロとも申請フォーム

この人とブロともになる

line
QRコード
QR
line
sub_line
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。