大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

[C言語入門] 演算子の使い方(8)

著者:高木信尚
公開日:2018/11/13
最終更新日:2018/11/13
カテゴリー:技術情報

高木です。おはようございます。

いい加減、このネタも引っ張り過ぎな気がします。
でも、中途半端で終えるわけにもいかないので最後まで行きます。
今回は乗除演算子です。

今回は、いつもに比べればちょっと短いと思います。
乗除演算子はそれだけ簡単だということです。
それでは早速行ってみましょう。

乗除演算子

Cの乗除演算子は、乗算(掛け算)、除算(割り算)、そして剰余算(整数の余りの計算)のための演算子です。
乗算には2項の*演算子を、除算のためには/演算子を、剰余算のためには%演算子を使用します。

乗除演算子はすべて2項演算子で、両方のオペランドは算術型でなければなりません。
%演算子のオペランドは、両方とも整数でなければなりません。
/演算子と%演算子の第2オペランド(右側のオペランド)がゼロの場合は未定義の動作になります。

乗除演算子を評価するにあたっては、両方のオペランドに対して「通常の算術型変換」を行います。
「通常の算術型変換」については別の機会で解説できればと考えていますが、興味のある方は自分で検索してみてください。

/演算子のオペランドが両方とも整数の場合、小数点以下を切り捨てた値(ゼロ方向丸め)が結果となります。
また、%演算子の結果は、a/bが表現できる場合、(a/b)*b + a%baに等しくなります。

a/bが表現できる場合ということは表現できない場合もあります。
bがゼロの場合もそうですが、オーバーフローする場合もあるのです。

たとえば、abがそれぞれint型で、int型が16ビットの場合を考えてみましょう。
このとき、負の値の内部表現には2の補数が使われるものとします。

aの値が-32768、bの値が-1のとき、評価結果はオーバーフローしてしまいます。
-32768を-1で割った結果は+32768ですが、これは16ビットのint型では表現できないからです。

ところで、C99より前の規格では、/演算子のオペランドの符合が異なる場合(正÷負、または負÷正の場合)、小数点以下を切り上げるか切り捨てるかは処理系定義でした。
これに伴って、%演算子についても、オペランドの符合が異なる場合の結果は処理系定義でした。
現存する処理系がすべて切り捨てとして振る舞うからこそC99では必ず切り捨てになったので、現実には気にする必要はないでしょう。

%演算子のオペランドは両方とも整数でなければなりません。
実浮動小数点数に対する剰余算を行いたい場合は、fmod関数(float版はfmodf、long double版はfmodl)を使うとよいでしょう。

ちょうど1000文字を超えたようなので、今回はここまでにします。
次回は加減演算子を解説する予定です。

コメントは受け付けていません。

上に戻る