- ベストアンサー
C言語のビット演算子について
jactaの回答
- jacta
- ベストアンサー率26% (845/3158)
一番よく使うのはフラグの操作です。関数の引数としてオプション情報を渡す場合などに使います。 例えば、 int fd = open(filename, O_WRONLY | O_APPEND | O_CREAT); のような使い方です。
関連するQ&A
- C言語のビット演算子に関して
はじめまして、今C言語の学習(半月ほど)を行っている者ですが ビット演算子のところで悩んでおります。 問題文に 変数cの2ビット目と3ビット目をONにする、 あるいはOFFにするといった表記がでてくるのですが このON、OFFとは何を意味しているのかいっこうにわかりません。 (私の考えではONとは1を意味しており2ビット目、3ビット目を ONにするとは -------------------------------------------------------------- ~1|1|0|0 (右から0ビット目、1ビット目、2ビット目、3ビット目) -------------------------------------------------------------- ということを言っているのではないだろうかと思っています。) ビットに関して私の勉強不足であることは十分に認識して おりますが、何かヒントをいただけるとありがたく思っています。 宜しくお願いいたします。
- ベストアンサー
- C・C++・C#
- ビット演算で00000001と1の頭に0を付ける?
https://www.grapecity.com/japan/powernews/column/clang/019/page02.htm ビット演算子 表1にCのビット演算子を掲げておきます。ビット演算とは言っても、扱う値はバイト単位などCの一般的な整数のデータ型です。ビット演算子は、それらの値をビット単位で計算します。 ビットシフト演算(<< >>)~2倍と1/2 例えばunsigned char型の1は、2進数では"00000001"という形のビット列(ビットパターン)になります。これを1桁左にずらす(シフトする)と"00000010"となります。ずらしてあふれた左端の0は消え、空いた右端には0が入ります。 "00000001"は10進数の「1」、"00000010"は10進数の「2」です。つまり、ビット列を左に1桁シフトすると値は2倍になるのです。 ----------------------------------------- 以上ですが、C言語の、ビット演算の解説の抜粋です。ビット演算はまだ覚えたてですが、"00000001"整数1の頭にわざわざ、0を沢山 つける目的は何なのでしょうか!? よろしくお願いします。
- ベストアンサー
- C・C++・C#
- ビット演算を理解するための参考書を探してます
ビット演算を理解するための参考書を探してます。 基本情報技術者の午後問題のC言語において、次のリンク先の問題のようにビットを使ったプログラム問題がさっぱり分かりません。 http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/H10a2/pm07.html そこで、今までビット演算系の問題に触れていなかったためだと思い、 ビット演算のプログラムを扱った詳しい参考書を探しています。 基礎から上記URLの問題レベルまでの内容のものが特に良いです。 回答よろしくお願いします。
- 締切済み
- C・C++・C#
- php と C# の ビット演算
PHPでビット演算をしていますが、 PHPでたとえば、 c = a >> b でビット演算した値と、 C#で演算した値と aの値を大きくした場合、 4000000000以上? は結果が違ってきます。 C#とPHPではビット演算のアルゴリズムが違うのでしょうか? よろしくお願いします。
- ベストアンサー
- PHP
- ビット演算子
掲題の件ですが、 ネットを調べていて他の言語のビット演算子は見つけることができたのですが、Visual Basicでのビット演算子が見つかりませんでした。 ビットシフトだと A >> 2 A << 2 などとかかれていたのですが、これは使えるのでしょうか? よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- C言語での複素数の四則演算について
C言語で、大きさ2の配列を2つ使って、複素数の四則演算のプログラムを作るのですが、配列をどう使うか分からず手が出せない状態です。 C言語を始めたばかりですので、基礎的なことしか分かりませんが、回答お願いします。
- ベストアンサー
- C・C++・C#
- 論理演算、ビット演算
C言語仕様上、真/偽は(Not0/0)であることは理解しています。また、処理順序から、論理演算とビット演算では評価対象の範囲が違うことも知っているつもりです。 その上で質問させていただきます。 お手数ですが、お解りになる方は教えていただけると助かります。 例えば、 i=0,j=0である場合 ( (i == 0) && (j == 0) )は真であると思いますが、 ( (i == 0) & (j == 0) )は規定されているでしょうか。 また、( (i == 0) | (j == 0) )は真となることが(理論上)保証されているように思えますが、問題ないでしょうか。 以上、よろしくお願いいたします。
- ベストアンサー
- C・C++・C#
- ビット演算を学びたい
a &= 2; a |= 2; a ^= 2; a ~= 2; a <<=2; a >>=2; みたいな感じでビット演算が使われているソースを 良く見るのですが、いまいちビット演算で何をしているのかが 分かりません。 参考書などには文字通りビットをいじるような旨のことが書いてあります。 (こちらにも同じようなことが http://www9.plala.or.jp/sgwr-t/c/sec14.html) こういうので何となくは分かるのですが、 実際にこれを何に使えるか、実践ではどのように使うのかが なかなか見えてきません。 このビット演算を私のような者でも実際のプログラムで使いこなせるように なれるようなサイトや書籍の提示、あるいはサンプルのプログラムなどで ご指導いただけたらと思います。
- ベストアンサー
- C・C++・C#
お礼
参考になりました。ありがとうございます!