C LANGUAGE TECHNOLOGY

【C言語】&を利用する3つの演算子【アドレス,論理積,ビット毎の論理積】

悩んでいる人

C言語で&はどう利用するの?

こういった悩みにお答えします.

本記事の信頼性

  • リアルタイムシステムの研究歴12年.
  • 東大教員の時に,英語でOSの授業.
  • 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校コンピュータサイエンス学部2021年の世界大学学術ランキングで20位)で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発
  • プログラミング歴15年以上,習得している言語: C/C++,Java,Python,Ruby,HTML/CSS/JS/PHP,MATLAB,Assembler (x64,ARM).
  • 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」GitHubにオープンソースとして公開

こういった私から学べます.

&a,*b:アドレス演算子(&)と間接演算子(*)

あなたがscanf関数を利用する時,変数の前に&をつけましたよね.

この&はアドレス演算子を呼び,その変数のアドレスを指します.

また,変数の前につける*は間接演算子と呼び,そのアドレスの値を指します.

アドレス演算子と間接演算子を利用するコードは以下になります.

実行結果は以下になります.

アドレスの値は実行毎に変わります.

3行目の行末のscanf関数による変数aの読み込みで「3」と入力したら,aに3が格納されました.

また,int型のポインタ変数bはaのアドレス&aを指しています(address_operator.cの10行目).

なので,bのアドレスと*bが,それぞれ&aとaと同じになります.

アドレス演算子(&)と間接演算子(*)は,ポインタ演算子です.

ポインタ演算子の詳細を知りたいあなたは,ポインタとはを読みましょう.

C言語 ポインタ
【C言語】ポインタとは

こういった悩みにお答えします. こういった私から学べます. 目次1 ポインタ2 ポインタ変数2.1 ポインタ演算子の使い方2.2 ポインタ変数を利用するコード3 ポインタと関数の引数:値渡しと参照渡し ...

続きを見る

a && b:論理積演算子(&&)

論理積演算子(&&)は,aとbの両方とも真の時に真,そうでなければ偽になります.

論理積演算子を利用するコードは以下になります.

実行結果は以下になります.

3と4を入力した場合は「3 and 4 are both positive.」,3と0を入力した場合は「3 and 0 are not both positive.」と出力されていることがわかります.

a & b:ビット毎の論理積演算子(&)

ビット毎の論理積演算子(&)はビット毎に論理積を計算し,両方のビットが1ならば1,そうでなければ0になります.

LinuxカーネルのようなOSでは,フラグのマスク処理に利用します.

以下の2行は同じビット毎の論理積演算子の処理を表すことに注意して下さい.

特に,2行目の書き方は頻出ですので,覚えましょう!

ビット毎の論理積演算子を利用するコードは以下になります.

実行結果は以下になります.

0xaaaaと0xffffのビット毎の論理積演算子による結果が0x00aaとなっています(3行目).

また,「a & b」と「a &= b」の結果も同じです(3~4行目).

まとめ

C言語で&を利用する3つの演算子を紹介しました.

  • &a,*b:アドレス演算子(&)と間接演算子(*)
  • a && b:論理積演算子(&&)
  • a & b:ビット毎の論理積演算子(&)

どの演算子も頻出ですので,正しく理解しましょう.

C言語を独学で習得することは難しいです.

私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.

友だち追加

独学が難しいあなたは,C言語を学べるおすすめのオンラインプログラミングスクール3社で自分に合うスクールを見つけましょう.

-C LANGUAGE, TECHNOLOGY
-, , , , , , ,