0

重複の可能性:
ビット演算の実用的なアプリケーション

プログラミングを始めて数年になりますが、ビット単位の演算子の実用的なアプリケーションについていつも疑問に思っていました。
私のプログラミング経験では、ビットごとの演算子を使用する必要はありませんでした。それらはいつ最も一般的に使用されますか? 私のプログラミングのキャリアにおいて、これらを学ぶ必要はありますか? ありがとうございました。友好的に、ジェームズ

4

3 に答える 3

1

最近は必要ありませんが、pascal をコーディングするときに、除数または乗算が 2 のべき乗である場合はいつでも、乗算または除算に使用していました。

色はバイトに格納され、下位 4 ビットに textcolor 、上位 4 ビットに背景色が格納されていました。

c * 16 の場合は代わりに c << 4 を使用し、c / 16 の代わりに c >> 4 を使用してバックグラウンドを保存または取得すると、何倍も高速でした。

また、 c <<4 >> 4 での textcolor の取得も c & 15 (bitvize and) よりもなぜか高速でした。おそらく登録関連;)しかし、それは私の頭を超えています:D

ただし、チェックサムの計算、圧縮、または暗号化を行っていない限り、おそらくなくてもかまいません。

ビットを int に何度も格納できる場合でも、ドライバーは任意の方法で物事を最適化でき、c# ではフラグ列挙型を使用して、ビット フラグをバイト、ワード、または整数値に自動的にパックできます。

ですから、用途が見つからないので、おそらくそれらが意味のある分野で仕事をしていないと思います.

于 2012-09-20T21:18:41.623 に答える
1

データのパック、圧縮の実行、または複数のブール値を 1 バイトにパックするときに、ビット単位の操作がハードウェアの近くで頻繁に使用されます。ビット演算はプロセッサ命令に直接マップされ、多くの場合非常に高速です。

I/O またはデバイス インターフェイスを使用している場合、ビットフィールドの一部を重要なデータに分離するために、ビット単位の操作が非常に必要になります。

または、2 倍の高速乗算として使用することもできます。:)

于 2012-09-20T20:46:40.123 に答える
1

バイナリとビットいじりのもう 1 つの楽しい使用法。

モールス信号を 1 バイトに詰め込みます。A.0、a-は 1 です。

A = .- 
A = 00000001xB
// Add a 'start bit'

A = 00000101xB

ビットを 8 回ほどずらし、開始ビットを見つけたら音を鳴らします。

    +------- Monitor this position
    V
A = 00000101 // Starting off
A = 00001010 // Nothing yet
A = 00010100 // Still nothing
A = 00101000 // WOw, a lot of nothing
A = 01010000 // Our boring life, we do nothing
A = 10100000 // Wow! A start bit! Prep to play sound.
A = 01000000 // Play a short
A = 10000000 // And play a long.
于 2012-09-20T21:00:37.850 に答える