4
1

More than 5 years have passed since last update.

1------------------------1 はなぜ計算できてしまうのか?

Last updated at Posted at 2019-08-03

はじめに

まずは、ruby や python で「1------------------------1」を計算してみてください。
以下はPythonの例です。

qiita.py
>python
Python 3.7.3 (default, Apr 24 2019, 15:29:51) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 1------------------------1
2
>>>

一見エラーとなりそうなコーディングですが、エラーとなりませんね。
さて、どうしてでしょうか?

マイナス記号(-)には3つの意味がある。

実はマイナス記号は次の3つの意味を持っています。

1.負数を表す「符号」としてのマイナス記号

これは一番ポピュラーですね。つまり、「-1」「-2」「-100」とか、負の数字を表す符号としてのマイナスです。
厳密にいうと、負符号のマイナス記号は単項演算子なのですが、わかりにくいので符号ということにしましょう。

2.「単項演算子」としてのマイナス記号

これは、例えば「-a」「-(b+c)」のマイナスです。
意味としては、直後の数字(aやb+c)の符号を逆転する(負なら正、正なら負)にする、となりますね。

3.「二項演算子」としてのマイナス記号

これは「a-b」のマイナスですね。aからbを引くという意味ですね。

以上をもとに順にひも解いていってみましょう。

(1) 1--1

この式は 1-(-1) と解釈されます。
つまり、最初のマイナス記号は「二項演算子」で、2つ目のマイナス記号は「符号」ですね。計算結果は2になりますね。

(2) 1---1

この式は、1-(-(-1)) と解釈されます。
すなわち、1つ目のマイナス記号が「二項演算子」、2つ目のマイナス記号が「単項演算子」、3つ目のマイナス記号が「符号」です。
計算結果は0ですね。

(3) 1----1

この式は、1-(-(-(-1))) と解釈されます。
最初が「二項演算子」、最後が「符号」、中の2つが「単項演算子」ですね。計算結果は2です。

つまり、1と1の間に、マイナスがn個あるとすると、1番目のマイナス記号は「二項演算子」、最後(n個目)のマイナス記号は「符号」、そして、中の(n-2)個のマイナス記号は「単項演算子」と見なされるわけです。
また、計算結果は、nが偶数のときは2、奇数のときは0になることは数学的帰納法で証明できますね。

最後に

参考まで、グーグル検索窓に「1------------------------1」を入れてみたら下記のようになりました。
計算過程まで表示してくれるので、なぜ2になるのかがよくわかりますね。

2019-08-03 (2).png

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1