C応用7 ビット演算と共用体
C応用7 ビット演算と共用体
未だ説明していない、比較的大きめな文法事項として、ビット演算子と共用体があります。
ビット演算子は、ビット単位に行う演算子で、以下の6種類があります。
ビットアンド演算子
ビットオア演算子
ビット排他的オア演算子
ビット反転演算子
右シフト演算子
左シフト演算子
共用体は、構造体と同じような書き方をする応用型の一つです。構造体はstructというキーワードを使ってタグ宣言するのに対し、共用体はunionというキーワードを使ってタグ宣言します。構造体のメンバは、異なるメモリが割り当てられるのに対して、共用体のメンバは、同じメモリが割り当てられます。
6種類あるビット演算子について説明します。
また、ビット演算を使う代表的な書き方を紹介します。
・ビット演算子の種類は6種類
論理アンドは&&のように、&を2つ書くのに対し、ビットアンドは&が1つです。オアも同様です。
排他的オア演算子の「^」は、ハット記号と呼ばれます。
ビット反転演算子の「~」は、チルダ記号と呼ばれます。
・ビット演算子結果は0と1になる
2つの整数型データの演算で、メモリに記録されている0と1のビットイメージの、同じ桁位置のビット同士が演算され、演算結果は、0もしくは1になります。
・シフト演算は、ビットイメージが左又は右にずれる
2つの整数型データの演算で、左辺のデータのビットイメージが、左又は右に、右辺の数分だけずれます。
・ビット演算は符号無し整数型が安心
右シフト演算結果は、符号有り型の場合、正の値か負の値かで、空いたビットに詰められるものが違います。符号無し型の場合は、空いたビットに詰められるのは0に決まっているので安心です。
Windows.hをインクルードすると、便利なデータ型名が使えます。
整数を入力し、その2進数を表示します。また、2進数の4ビット表示単位に、対応する16進数を表示します(「%1x」という書式指定子を使います)。
YouTubeの動画説明の所にURLが記載されているので、そこからからベースとなるプログラムをダウンロードします。空欄となっている、2進数表示と16進数表示の部分を完成させます。
プログラムの実行結果が表示されるウィンドウ(コンソールウィンドウ)には、基本色として16色が表示できます。
今回、その16色に番号を割り振っていて、その番号を指定して色付けしています。
この番号は、色の3原色であるRGBをビット表現した番号になっています。
1(RED) + 2(GREEN)が3(BRAWN)に、5(MAGENTA) - 4(BLUE)が1(RED)になる様な色の加減算を行って色の指定を行います。
YouTubeの動画説明の所にURLが記載されているので、そこからからベースとなるプログラムをダウンロードできますので、これを使ってプログラムを完成させます。
共用体の宣言方法、メンバのアクセス方法を説明します。
具体的な使用例として、色情報を扱う場合のプログラミン例を紹介します。
・共用体の書き方は構造体と同じ
構造体と同様に、typedefを使ったタグ宣言をします。構造体はstructに対し、共用体はunionというキーワードを使います。変数宣言することでメモリが確保されます。
メンバへのアクセスは、共用体変数の場合はドット(.)演算子を使い、共用体ポインタの場合はアロー(->)演算子を使います。
・共用体のメンバは、同じメモリを使う(共用する)
構造体メンバのメモリは、異なるメモリが割り付けられますが、共用体メンバのメモリは、同じメモリが割り付けられます。このため、共用体変数宣言で確保されるメモリのサイズは、メンバの中で一番大きなサイズを持つメンバのデータ型のサイズになります。
YouTubeの動画説明の所にURLが記載されているので、そこからからベースとなるプログラムをダウンロードします。このプログラムは、構造体変数のメンバにデータを代入した後、各メンバを表示するプログラムです。
このプログラムを、共用体に変更します。構造体で実行した時の結果と、共用体に変更した時の結果を比較し、その違いを考察します。
YouTubeの動画説明の所にURLが記載されているので、そこからからベースとなるプログラムをダウンロードします。このプログラムは、画像ファイルを読み込んで、ビットイメージを表示するプログラムです。このプログラムでは透過処理を行っていないため、個々の画像ファイルにより異なる背景色が表示されます。透過処理のプログラムを追加し、背景を表示しない様にします。
テスト実施フォーム ← テストチャレンジできます
上記テストの解説と解答