+, -, *, /, %四則演算については,多くのプログラミング言語で使用されているものと同じです。ただ,文字を 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