除算乗算代入演算子と乗算除算代入演算子について
C言語等で、"加算代入演算子[+=]"というものがあります。
int a = 8; int b = 16; a += b;
とすると、aの値は24になります。左オペランドの値に右オペランドを加算した値を、左オペランドに代入する演算子です。これはメジャーな演算子なのですが、この仲間の演算子で、マイナーな"除算乗算代入演算子(/*=)"、"乗算除算代入演算子(*/=)"というものがあります。ご存知でしたか?
例えば以下のようなプログラムがあります。
int a = 8; int b = 16; a */= b;
左オペランドの値に右オペランドの値を乗算して、さらに除算して、左オペランドに代入する演算子です。当然aの値は変わらず8のままだということです。乗算した値と同じ値で除算するのですからね。
そんな演算子を利用して、適当なプログラムを組んでみるのですが、どうやら実行結果が期待と異なります。
プログラム
#include <stdio.h> int main(void) { int a = 8 int b = 16; a /*= 10; b */= 16; printf("a = %d, b = %d\n", a, b); return 0; }
実行結果
a = 16, b = 16
おかしいですね。aの値は8になるはずです。(8 × 10 ÷ 10)は8です。16ではありません。bの値は正しいようですね。(16 ÷ 16 × 16)は16です。しかし、何故aは期待通りの値にならないのでしょうか。除算乗算代入演算子と、乗算除算代入演算子の効果は異なるのでしょうか?さあ、よく考えてみましょう。
おや、ギブアップでしょうか?
仕方ありませんね。
その答えは、シンタックスハイライトしてみると分かります。
#include <stdio.h> int main(void) { int a = 8 int b = 16; a /*= 3; b */= 5; printf("a = %d, b = %d\n", a, b); return 0; }
除算乗算代入演算子、乗算除算代入演算子なんて、現在どの言語にも存在しません。くだらないネタにお付き合い頂き、ありがとうございました。
いやー、プログラミングって面白いですね!
ではでは。