回答編集履歴

4

追記

2019/01/06 15:02

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -1,4 +1,4 @@
1
- == は、両辺が等しいときに1を、等しくないときに0を返す演算子です。
1
+ == は、両辺が等しいときに1を、等しくないときに0を返す演算子です。**(註)**
2
2
 
3
3
  ```C
4
4
 
@@ -78,6 +78,24 @@
78
78
 
79
79
 
80
80
 
81
+ ---
82
+
83
+ **註:**
84
+
85
+ C++においては返り値がbool型になりますが、
86
+
87
+ intへの型昇格の結果、true/false がそれぞれ 1/0 になることが保証されています。
88
+
89
+
90
+
91
+ > the type bool can be converted to int with the value false becoming ​0​ and true becoming 1.
92
+
93
+
94
+
95
+ 引用元: [cppreference.com - Implicit conversions](https://en.cppreference.com/w/cpp/language/implicit_conversion#Integral_promotion)
96
+
97
+
98
+
81
99
  ご提示のコードについて
82
100
 
83
101
  ---

3

追記

2019/01/06 15:02

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -95,3 +95,39 @@
95
95
 
96
96
 
97
97
  == の比較結果をaに代入しているだけです。1あるいは0が代入されます。
98
+
99
+
100
+
101
+ おまけ
102
+
103
+ ---
104
+
105
+ 初心者がやりがちなミスは、== を = に取り違えることです。
106
+
107
+ = は、左辺に右辺の値を代入した上で、その値を返す演算子です。
108
+
109
+
110
+
111
+ さて、次のコードの実行結果が想像できるでしょうか。
112
+
113
+ ```C
114
+
115
+ int a;
116
+
117
+ if(a = 1) {
118
+
119
+ printf("a = 1\n");
120
+
121
+ }
122
+
123
+ if(a = 0) {
124
+
125
+ printf("a = 0\n");
126
+
127
+ }
128
+
129
+ ```
130
+
131
+
132
+
133
+ 原因を知っていればミスが減ります。ぜひ考えてみてください。

2

追記

2019/01/06 14:53

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -75,3 +75,23 @@
75
75
  1 + 2
76
76
 
77
77
  ```
78
+
79
+
80
+
81
+ ご提示のコードについて
82
+
83
+ ---
84
+
85
+ > ```C
86
+
87
+ int a,b,c;
88
+
89
+ ...
90
+
91
+ a = ( b == c ) // ←?????
92
+
93
+ > ```
94
+
95
+
96
+
97
+ == の比較結果をaに代入しているだけです。1あるいは0が代入されます。

1

追記

2019/01/06 14:48

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -1,6 +1,4 @@
1
1
  == は、両辺が等しいときに1を、等しくないときに0を返す演算子です。
2
-
3
- if文ではその比較結果を利用しているにすぎません。
4
2
 
5
3
  ```C
6
4
 
@@ -33,3 +31,47 @@
33
31
  0
34
32
 
35
33
  ```
34
+
35
+
36
+
37
+ if文ではその比較結果を利用しているにすぎず、+ とか * と言った他の二項演算子と変わりありません。
38
+
39
+ 有用かどうかは別として、実際に次のようなコードを書くことができます。
40
+
41
+ ```C
42
+
43
+ #include <stdio.h>
44
+
45
+
46
+
47
+ int main(void) {
48
+
49
+ if(1 + 2) { // 0以外の数値は真値
50
+
51
+ printf("1 + 2\n");
52
+
53
+ }
54
+
55
+ if(-1 + 1) { // 0は偽値
56
+
57
+ printf("-1 + 1\n");
58
+
59
+ }
60
+
61
+
62
+
63
+ return 0;
64
+
65
+ }
66
+
67
+ ```
68
+
69
+
70
+
71
+ **実行結果** [Wandbox](https://wandbox.org/permlink/bD1jbDl5I7Yksufa)
72
+
73
+ ```
74
+
75
+ 1 + 2
76
+
77
+ ```