+
, -
, *
, /
, %
四則演算については,多くのプログラミング言語で使用されているものと同じです。ただ,文字を ASCIIコード番号で扱っているため,文字についても四則演算ができます。
■加減演算子(Additive Operators)[C99, 6.5.6] | |
+ | 加算 |
- | 減算 |
■乗除演算子(Multiplicative Operators) [C99, 6.5.5] | |
* | 乗算 |
/ | 除算:第2変数が 0 の場合,未定義の動作となる。整数型同士の場合,少数部は切り捨てられる。 |
% | 剰余:第2変数が 0 の場合,未定義の動作となる。 |
乗除演算子は,算術型に限る。剰余演算子については整数型同士に限る。[C99, 6.5.5, 2] 加減演算子については,算術型以外にポインタ型を含めることができるが,一部制限あり。(これについては後述。)
すべてのオペランドが算術型の場合,各オペランドに対し通常の算術型変換が施される。したがって,式の型は,変換後の型となる。
整数型同士で a/b
が計算可能な場合,
(a/b)*b + a%b
は a
に等しくなります。(確認してみください。)
/* Example 7.1 */ #include <stdio.h> int main(void) { unsigned char c = 't'; printf("%c (%d)\n", c, c); c = c + 'A' - 'a'; printf("%c (%d)\n", c, c); return 0; }
実行結果です。
t (116) T (84)
丸括弧内は,ASCIIコード番号です。c + 'A' - 'a'
は小文字から大文字への変換式です。(但し,変数 c
の値が小文字の場合。付言すると,標準ライブラリ ctype.h
に小文字を大文字に変換する関数 toupper
と,大文字を小文字に変換する関数 tolower
があります。また,ctype.h
には小文字であることをテストする islower
関数,大文字であることをテストする isupper
関数などもあります。)
式 c + 'A' - 'a'
は int
型,そして,unsigned char
型へ変換されます。(この例の場合,unsigned char
を int
とすれば,型変換は一切行われない。)
/* Example 7.2 */ #include <stdio.h> int main(void) { long long l = 111111111LL, m = 0LL; m = l*l; printf("%lld\n", m); m = m % 11; printf("%lld\n", m); return 0; }
実行結果です。
12345678987654321 1