ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
2進数で表現されたデータの各桁(ビット)を直接操作する演算のこと。
論理和は二項演算であり、互いのビットのどちらかが1であれば出力が1となる。ビット演算における足し算ともいえる。
C/C++では、論理和のビット論理演算子は|(縦棒)である。
なお、C/C++の||は論理関係演算子であり、引数全体を一つの論理値(ブーリアン)として扱い演算をするもので、ビット演算ではない。
x = a | b;
上の例は、C/C++で、aとbの論理和をxに代入する。この演算は、ビット列がフラグになっていて、特定のビットを立てるような場合にもよく用いられている。
排他的論理和は二項演算であり、互いのビットが不一致であれば出力が1となる。
C/C++では、排他的論理和のビット論理演算子は^(サーカムフレックス)である。
なお、C/C++には、排他的論理和の論理関係演算子はなく、ビット演算のみが存在する。
x = a ^ b;
上の例は、C/C++で、aとbの排他的論理和をxに代入する。
論理否定は一項演算であり、項のビットが0であれば出力が1となる。
C/C++では、論理否定のビット論理演算子は~(チルダ)である。
なお、C/C++の!(エクスクラメーション)は論理関係演算子であり、引数全体を一つの論理値(ブーリアン)として扱い演算をするもので、ビット演算ではない。
x = ~a;
上の例は、C/C++で、aの論理否定をxに代入する。
ビットシフトも、広い意味でのビット演算の一種である。
マイクロプロセッサーのレジスターは特定の長さのビット列を持ち、この範囲内で右又は左にビット列をずらす演算を行なうことができる。これがビットシフトである。
ビット列のうち、符号の扱い方によって大きく、論理シフトと算術シフトに分けられる。
ローテートも、広い意味でのビット演算の一種である。
ローテートは論理ビットシフトと同様の動作をするが、あふれたビットが空いたビットに格納され、もって全体として回転しているように見えるのが特徴である。
一般的なローテートで、右または左方向にビットシフトし、あふれた分が空いたビットに複写される。
ビットシフトと同様に、プロセッサーによっては、あふれた内容をキャリーフラグ等に格納するものがある。
特殊なローテートで、最上位ビットと最下位ビットの間にもう1ビットのキャリーフラグを連結したような構造でローテートするものである。
空いたビットにはキャリーフラグの内容が入り、次にあふれたビットをキャリーフラグに入れる。
実質、レジスター長よりも1ビット大きな値を扱うことができる。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます