コンマオペレータ
可変的な宣言、機能議論、等を分けるのにcでコンマが頻繁にように簡単な句読点、使用されている。 ある特定の状態では、コンマはオペレータとして機能する。
コンマの2つの補助的な表現の分離によって表現を形作ることができる。 結果は次の通りある:
- 表現は両方とも最初に評価されて左の表現が、評価される。
- 全体の表現は右の表現の価値に評価する。
例えば、次の声明はbにxの価値を割り当て、次にaを増加し、そして次にbを増加する:
x = (a++, b++);
cの演算子の優先順位(cオペレータの概要)
ランクおよびAssociativity |
オペレータ |
1 (左から右) |
() [] -> . |
2 (左に右) |
! ~ ++ -- * (間接的処置)及び(演説の) (タイプ)
sizeof + (一成分) -
(一成分) |
3 (左から右) |
* (乗法)/% |
4 (左から右) |
+ - |
5 (左から右) |
<< >> |
6 (左から右) |
< <= > >= |
7 (左から右) |
= = != |
8 (左から右) |
及び(ビットごとにおよび) |
9つ(左から右) |
^ |
10 (左から右) |
| |
11 (左から右) |
&& |
12 (左から右) |
|| |
13 (左に右) |
?: |
14 (左に右) |
= += - = *=/=
%=の&=の^=の|=の<<=の>>= |
15 (左から右) |
, |
()機能オペレータはある; []配列オペレータはある。 |
|
私達をオペレータの使用例を取ることを許可しなさい:
/* オペレータの使用 */
int main()
{
int x = 0, y = 2, z = 1025;
float a = 0.0, b = 3.14159, c = -37.234;
/* 増加 */
x = x + 1; /* これはxを増加する */
x++; /* これはxを増加する */
++x; /* これはxを増加する */
z = y++; /* z = 2, y = 3 */
z = ++y; /* z = 4, y = 4 */
/* 減少 */
y = y - 1; /* この漸減y */
y--; /* この漸減y */
--y; /* この漸減y */
y = 3;
z = y--; /* z = 3, y = 2 */
z = --y; /* z = 1, y = 1 */
/* 算術操作 */
a = a + 12; /* これはaに12を加える */
a += 12; /* これはaに12をもっと加える */
a *= 3.2; /* これは3.2によってaを増加する */
a -= b; /* これはaからbを引 */
a /= 10.0; /* これは10.0までにaを割ることによって求める */
/* 条件式 */
a = (b >= 3.0 ? 2.0 : 10.5 ); /* この表現 */
if (b >= 3.0) /* そしてこの表現 */
a = 2.0; /* 同一が、両方ありなさい */
else /* 同じをもたらす */
a = 10.5; /* result. */
c = (a > b ? a : b); /* cにaかbの最高がある */
c = (a > b ? b : a); /* cにaまたはbの分がある */
printf("x=%d, y=%d, z= %d\n", x, y, z);
printf("a=%f, b=%f, c= %f", a, b, c);
return 0;
}
そしてこのプログラムの結果はスクリーンに次のように表示される:
x=3, y=1, z=1
a=2.000000, b=3.141590, c=2.000000 |
|