皆さんこんにちは。
先日後輩から、「2進数とか16進数って、どんな時にプログラムで使うんですか?」
と質問を受けました。
2進数や16進数→10進数、10進数→2進数や16進数の計算方法はわかりますが、
”いつ、どこで、どのような場合”に使うかわかりません。
今は、パソコン自体の性能も向上し、メモリ不足という心配もなくなり、
ビット計算という機会も少なくなったせいかもしれませんが、私自身
プログラミングで見たり使ったりしたことがありません。
どなたかそういう使用例をご存知の方がおられれば、サンプルソースや
そういう記事が載ってるサイトを教えて頂きたいと思います。
宜しくお願いします。
No.3ベストアンサー
- 回答日時:
>”いつ、どこで、どのような場合”に使うかわかりません。
複数のON/OFFのフラグを関数の引数に渡す場合に使用します。
例えば、新規ウィンドゥを開く関数に、開く時のスタイルを指定する場合などは、各フラグを2進数に見立てて指定します。
ON/OFF可能なフラグが10個くらいあった時、引数を全部並べて書くのは面倒ですし、関数の呼び出し時のオーバーヘッドが大きくなるので、1つの引数にまとめた方が有利なのです。
また、複数のON/OFFのフラグを関数からの戻り値として返す場合も有効です。
例えば、関数を呼んだ結果、戻り値の第1ビットが1なら垂直スクロール可能、第2ビットが1なら水平スクロール可能、第3ビットが1ならサイズ変更可能、とか。
こういう使い方をすれば「関数は値を1つしか返せないけれども、複数の意味を持った結果が返せる」訳です。
WindowsのAPI関数などでも
「○○は以下のリストにある値を"|(OR)演算子"で結合したものを指定します」
と言う仕様の物があります。これも「複数の値を2進数に見立てて、まとめて指定する」と言う手法を用いています。
その他、ビット計算が必要になるケースでは「画像の重ね合わせ合成を行う」などがあります。
これの典型例が「マウスカーソルの描画」で、カーソルパターン(カーソルの見える部分のパターン)とマスクパターン(透明部分、不透明部分を指定する為のパターン)とカーソル下の元のパターンの3つに対し、複雑なビット演算を行って「背景やウィンドゥの上にマウスカーソルが乗った画像」を作り出して、画面に描画しています。
このように「ビット演算」は、今のパソコンには絶対必要不可欠ですが、その殆どは、アプリやユーザーが直接扱う事の無い基本機能の部分に集中していてOSやシステムに組み込み済みな為、実際のプログラミングで見聞きする事は滅多に無いと思います。
No.4
- 回答日時:
> 2進数や16進数→10進数、10進数→2進数や16進数の計算方法はわかりますが、
> ”いつ、どこで、どのような場合”に使うかわかりません。
最も典型的なのは、ハードウェアを直接制御する場合です。
アドレスを指定したり、制御レジスタを設定・参照したり、入出力ポートを操作する場合などでは、16進数は必須です。
もちろん、論理演算を行う場合にも、16進数や2進数で考えないと、10進数で考えるのは難度が高すぎます。
> 今は、パソコン自体の性能も向上し、メモリ不足という心配もなくなり、
> ビット計算という機会も少なくなったせいかもしれませんが、
パソコンをターゲットとしたプログラムは、プログラムの分野全体から見れば、ごくごく一部に過ぎないことをお忘れなく。
ちなみに、C/C++では2進数を直接使うことはできません。文字列を介すか、16進数や8進数として使うことになります。
No.1
- 回答日時:
自分で16進数を使う場合というと…
ON/OFFだけのフラグを1つの変数にまとめておく時に使用します。
貧乏性なためかも知れませんが、それぞれのフラグにchar/intなどを割り当てる気にはなりません。
#define FLAG_A 0x00000001
#define FLAG_B (FLAG_A << 1)
#define FLAG_C (FLAG_B << 1)
int flag = 0;
// フラグAがたっていたときの処理
if (flag & FLAG_A)
{
}
// フラグBとCがたっていたときの処理
if ((flag & FLAG_B) && (flag & FLAG_C))
{
}
こんな使い方ですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ソフトウェア) F-BASICで計算中の実行が中途で勝手に止まり、大変困っています。 2 2023/03/02 16:15
- Excel(エクセル) 表計算ソフトcalcにおいて、1時間10分を1.1と表記する方法とそれらを集計する方法は? 4 2022/04/06 16:54
- Excel(エクセル) Excel(エクセル)でフィルター抽出後、非表示の行を計算しないで、合計を算出する方法 【内容】 添 4 2023/01/30 17:17
- 労働相談 有給休暇使用時の賃金の計算方法について 5 2022/04/04 00:02
- C言語・C++・C# C言語 3 2022/10/04 15:07
- 計算機科学 2進数の計算について 2進数の値は全て8ビットで負数は2の補数形式とする。結果が8ビットで表現出来な 3 2023/07/22 14:08
- その他(コンピューター・テクノロジー) 量子コンピュータの動作原理がわかりません。同じビットが、1でも0でも有って良いだろうか? 3 2023/02/04 03:20
- その他(コンピューター・テクノロジー) 50台の織機から回転数を取得・集計しモニターに表示したい 2 2022/11/05 15:48
- その他(法律) 役所の人間が勝手に間違えて振込、それを知って使って刑事事件とか、不当逮捕そのものでは? 5 2022/05/22 15:13
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
バッチファイルでウインドウを...
-
変化させるセルが変化しない
-
排他的論理和 BCC(水平パリテ...
-
骨折リスク評価のFRAXについて...
-
傾いた四角形内の範囲の条件式
-
タクシー料金の問題です
-
C++言語で、レナードジョーン...
-
計算式の文字列を解析して自分...
-
EXCELなどで「返す」という表現
-
べき乗の計算が遅い理由
-
数値計算の高速化 (cos, sin, exp)
-
ExcelのマクロVBA動作を軽くす...
-
prolog計算
-
CCurの引値を文字列にする時と...
-
VBAの再計算が反映されない件に...
-
Excel VBA TREND関数について
-
順列のプログラムについて(VB)
-
C言語初心者。静磁場の計算。台...
-
エクセルで特定のセルのみを任...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
バッチファイルでウインドウを...
-
モジュラス103の計算とは何でし...
-
傾いた四角形内の範囲の条件式
-
Visual C++でdebugとreleaseで...
-
変化させるセルが変化しない
-
骨折リスク評価のFRAXについて...
-
C# 計算処理中に実行中ウィン...
-
VBAでの勤務時間計算
-
べき乗の計算が遅い理由
-
C言語についてです。 再帰を使...
-
Excel VBAにてFFT
-
数値計算の高速化 (cos, sin, exp)
-
VBとVBAの違い
-
VB6で正確なミリ秒を計測したい...
-
スレッド処理からダイアログを...
-
matlabで計算終了
おすすめ情報