質問 |
||
| 質問者:masy0312 | C言語のビット演算子について | |
|---|---|---|
困り度:
|
C言語のビット演算子に関する質問です。 ビット単位の演算とは、どのような場面で使用されているものなので しょうか? また、ビット単位の演算が行えることにどのようなメリットがあるの でしょうか? 基本的な質問で申し訳ございませんが、どなたかご回答頂けますか? |
|
質問投稿日時:08/03/26 22:12 質問番号:3897563 |
||
回答良回答20pt |
|
| 回答者:Oh-Orange | ★過去質問より。 ・次の過去質問をちょっと見て下さい。 http://oshiete1.goo.ne.jp/qa3132505.html→『C言語での数字の花形表示』 この質問を読み回答No.1と回答No.6を見比べて下さい。 私の回答ではビット演算(AND)を利用して花文字の表示をしています。 データの作り方にもよりますがビット演算などを上手く利用すると すっきりと処理できるようになります。 ・他にも経路ゲームで『壁=0』『道=1』の2つで構成されるマップがあるとします。 このマップが256×256の大きさだと char型で表現すると65,536バイト int型で表現すると262,144バイト のデータ量になります。※int型は32ビットとする。 迷路のマップが100ステージあると物凄いデータ量になります。 このような場合はchar型(int型)よりもビットで『壁』『道』を表現すれば 1マップは256×256の大きさでも32×32=1024バイトですみます。 データの圧縮にもなります。 ・このデータを読み取るときにはビット演算を駆使すれば迷路パターンを読み取れます。 このように工夫次第でいろいろと活用できるのです。 ポインタも使い次第では便利ですので。同じことです。 |
|---|---|
| 種類:アドバイス どんな人:専門家 自信:参考意見 |
|
| |
回答日時:08/03/27 20:46 回答番号:No.5 |
|
| この回答へのお礼 | 具体的なご説明ありがとうございます。 非常に勉強になります! |
回答 |
|
| 回答者:chie65536 | >ビット単位の演算とは、どのような場面で使用されているものなので >しょうか? 他の回答の通りです。 >また、ビット単位の演算が行えることにどのようなメリットがあるの >でしょうか? 直接のメリットは「関数に、真か偽のみの値を複数個渡す場合に、高速に値渡しが出来る」くらいです。 他の回答の >int fd = open(filename, O_WRONLY | O_APPEND | O_CREAT); も「読み書き可が真」と「アペンド可が真」と「新規作成が真」の3つの値を渡すのに「一つの引数」で済ませています。 |
|---|---|
| 種類:回答 どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/27 17:37 回答番号:No.4 |
|
| この回答へのお礼 | なるほどですね。 了解しました、ありがとうございます! |
回答良回答10pt |
|
| 回答者:eagle-eyed | こんばんは。 メリットと使われ方の場面を、ほぼ言葉のみにて書かせて頂きます。 質問者様におかれまして、ご参考になれば幸いかと存じ上げます。 メリットを(使われます場面との関連性が大です) 1. 高速で計算可能な CPU において、演算の速度が、高速です。 2. メモリの消費量を、最小限に抑えうる事が出来ます。 3. 1つの変数で、複数の情報を持つ事が出来ます。 等です。 使われています場面を。 ハードウェア(デバイス系、制御系等)を、直接操作するプログラムにおいて、 プログラムミングの際に、ビット単位で情報を、表現する場合に使われます。 最高速で、無駄の無い演算処理を、行う部分がほとんどです。 演算処理や暗号化等、非常に高い処理能力が、必要になる場合に使われます。 但し、学んで行く過程、趣味等は除きますが。 追記です。現在、補足が書けない状態ですので、ご存知でしたら失礼m(__)m ビット演算を行う変数は、符合なし( unsigned )変数を使うのが普通ですが、 ビット単位でデータ操作をする為、対象は整数( int )に限られます。 個人で、PC 向けのプログラムでは、ほとんど用いられる事は、なくなりましたが、 使われないとも限りません(メンテナンス時に、わかりにくくなる為) #現在補足を頂いても、私情にてほぼ不可能ですので、 #誠に申し訳御座いませんが、その点は何卒ご了承のほどをお願い致します。 |
|---|---|
| 種類:回答 どんな人:専門家 自信:参考意見 |
|
| |
回答日時:08/03/27 02:30 回答番号:No.3 |
|
| この回答へのお礼 | 丁寧でわかりやすいご回答ありがとうございます。 非常に参考になりました。 |
回答 |
|
| 回答者:jacta | 一番よく使うのはフラグの操作です。関数の引数としてオプション情報を渡す場合などに使います。 例えば、 int fd = open(filename, O_WRONLY | O_APPEND | O_CREAT); のような使い方です。 |
|---|---|
| 種類:回答 どんな人:専門家 自信:参考意見 |
|
| |
回答日時:08/03/27 00:13 回答番号:No.2 |
|
| この回答へのお礼 | 参考になりました。ありがとうございます! |
回答 |
|
| 回答者:redfox63 | 画面の画素の色を表すのに RGBが使われます このRGB各要素が 8ビットのデータを扱うのにint型などが使われます このとき 上位16ビット中の下位8ビットにRed 下位16ビット中の上位8ビットが Green 下位16ビット中の下位8ビットが Blue と言った場合に各RGBのデータを抽出する際などにビット演算を使います int r = ( rgb & 0xFF0000 ) >> 16; int g = ( rgb & 0x00FF00 ) >> 8; int b = ( rgb & 0x0000FF ); // r g b に対して何らかの演算をする rgb = ( r << 16 ); rgb |= ( g << 8 ); rgb |= b; と言った具合で復元する |
|---|---|
| 種類:アドバイス どんな人:専門家 自信:参考意見 |
|
| |
回答日時:08/03/26 22:26 回答番号:No.1 |
|
| この回答へのお礼 | 画像処理の分野でビット演算を使用するという話を知人から以前 聞いたことがありました。 ご回答頂いた内容は非常に参考になりました。 ありがとうございます! |