C言語入門:論理演算子と代入演算子の基本をわかりやすく解説
C言語には、条件式を組み合わせたり、変数に値を格納したりするためのさまざまな演算子が用意されています。本記事では、その中でも特に重要な「論理演算子」と「代入演算子」について、真理値表やサンプルプログラムを交えながら詳しく解説します。
論理演算子とは
論理演算子は、2つ以上の条件式を論理的に組み合わせ、その結果を「真(1)」または「偽(0)」として評価するための演算子です。if文やwhile文などの条件分岐・繰り返し処理で、複雑な条件を記述する際に欠かせません。
- 論理積(AND):&&
- 論理和(OR):||
- 否定(NOT):!
論理積(&&)の真理値表
左右の両方の式が真(T)である場合のみ、結果は真になります。
| exp1 | exp2 | exp1 && exp2 |
|---|---|---|
| T | T | T |
| T | F | F |
| F | T | F |
| F | F | F |
論理和(||)の真理値表
左右のどちらか一方でも真(T)であれば、結果は真になります。
| exp1 | exp2 | exp1 || exp2 |
|---|---|---|
| T | T | T |
| T | F | T |
| F | T | T |
| F | F | F |
否定(!)の真理値表
式の真偽を反転させる演算子です。真は偽に、偽は真になります。
| exp | !exp |
|---|---|
| T | F |
| F | T |
論理演算子の使用例
a=10、b=20、c=30 のとき、各論理演算子は次のように評価されます。
| 演算子 | 説明 | 式の例 | 実際の評価(a=10, b=20, c=30) | 結果 |
|---|---|---|---|---|
| && | 論理積(AND) | (a>b)&&(a<c) | (10>20)&&(10<30) | 0 |
| || | 論理和(OR) | (a>b)||(a<=c) | (10>20)||(10<=30) | 1 |
| ! | 否定(NOT) | !(a>b) | !(10>20) | 1 |
C言語では、条件が成立する場合に「1」、成立しない場合に「0」という整数値が返されます。
論理演算子のサンプルプログラム
以下は、論理演算子の動作を確認するためのCプログラムです。
#include<stdio.h>
main(){
float a=0.5, b=0.3, c=0.7;
printf("%d\n", (a<b)&&(b>c)); // 0 //
printf("%d\n", (a>=b)&&(b<=c)); // 1 //
printf("%d\n", (a==b)||(b==c)); // 0 //
printf("%d\n", (b>=a)||(a==c)); // 0 //
printf("%d\n", (b<=c)&&!(c>=a));// 0 //
printf("%d\n", !(b<=c)||(c>=a));// 1 //
}
実行結果
0 1 0 0 0 1
float 型の変数 a、b、c を使って各条件式を評価し、printf 関数で結果(0または1)を出力しています。コメントに記載した値がそれぞれの出力結果です。
代入演算子とは
代入演算子は、変数に値を格納(代入)するために使用される演算子です。
代入演算子の種類
代入演算子には、主に以下の2種類があります。
- 単純代入演算子:「=」のみを使用する基本的な代入
- 複合代入演算子:算術演算と代入を一度に行う「+=」「-=」「*=」「/=」「%=」など
| 演算子 | 種類 | 記述例 | 意味 |
|---|---|---|---|
| = | 単純代入 | a = 10 | a に 10 を代入する |
| += | 加算代入 | a += 10 | a = a + 10 と同じ |
| -= | 減算代入 | a -= 10 | a = a - 10 と同じ |
| *= | 乗算代入 | a *= 10 | a = a * 10 と同じ |
| /= | 除算代入 | a /= 10 | a = a / 10 と同じ |
| %= | 剰余代入 | a %= 10 | a = a % 10 と同じ |
複合代入演算子を使うと、同じ変数に対する演算と代入を簡潔に1行で書けるのがメリットです。
複合代入演算子のサンプルプログラム
以下は、複合代入演算子の動作を確認するCプログラムです。char 型変数 a に文字 'h' を代入し、ASCIIコードの値を操作しながら各演算子の挙動を観察します。
#include<stdio.h>
int main(void){
int i;
char a='h';
printf("enter the value of i:\n");
scanf("%d",&i);
printf("print ASCII value of %c is %d\n", a, a);
a += 5;
printf("print ASCII value of %c is %d\n", a, a);
a *= a + i;
printf("a = %d\n", a);
a *= 3;
printf("a = %d\n", a);
a /= 2;
printf("a = %d\n", a);
a %= 4;
printf("a = %d\n", a);
return 0;
}
実行結果
enter the value of i: 3 print ASCII value of h is 104 print ASCII value of m is 109 a = -80 a = 16 a = 8 a = 0
実行結果の解説
- 文字 'h' のASCIIコードは 104 です。
a += 5により a は 109 になり、対応する文字は 'm' になります。a *= a + i(i=3)では 109 × 112 = 12208 となりますが、char 型が扱える範囲(-128〜127)を超えるためオーバーフローし、-80 になります。a *= 3では -80 × 3 = -240 となり、これも範囲を超えるため 16 になります。a /= 2で 8 となり、最後にa %= 4で 8 ÷ 4 の余り 0 が出力されます。
まとめ
論理演算子は複数の条件を組み合わせる際に、代入演算子は変数への値の格納や更新に不可欠な機能です。特に複合代入演算子を使いこなせるようになると、コードをより簡潔に記述できます。ぜひご自身でもサンプルコードを実行して、その挙動を確かめてみてください。
-
C言語の文字操作を徹底解説!宣言方法と入出力関数の使い方
Cプログラミング言語において、文字(character)は英大文字(A〜Z)、英小文字(a〜z)、数字(0〜9)、空白(ホワイトスペース)、または特殊記号のいずれかとして扱われます。文字の宣言方法C言語で文字型変数を宣言する際は、char 型を使用します。文字定数はシングルクォーテーション( )で囲んで指定します。char a = A; /* 文字定数を使用した宣言 */このように宣言することで、変数 a に1文字分のデータを格納できます。文字入出力関数の種類C言語には、文字を入出力するための関数がいくつか用意されています。代表的なものは以下の3組です。scanf / printf: 書式指定
-
C言語のポインタ入門!宣言・初期化から配列アクセスの実例まで徹底解説
ポインタ(pointer)とは、他の変数のメモリアドレスを格納するための変数です。C言語においてポインタは、メモリを直接操作したり、関数間でデータを効率的にやり取りしたりするために欠かせない重要な概念です。 ポインタの宣言・初期化とアクセス まず、次のような通常の整数変数の宣言を見てみましょう。 int qty = 179; 変数qtyには値「179」が格納されると同時に、メモリ上のどこかにその格納場所(アドレス)が割り当てられます。 ポインタの宣言 int *p; 「p」はポインタ変数であり、別の整数型(int)変数のアドレスを保持します。変数名の前にアスタリスク(*)を付けることで、「こ