Be careful: (-N//2) and (0-N//2) を見ていて混乱した話です。
問題のコードを実行
まず、上記リンクで話題になっているコードを動かしてみます。
N = 99 print(-N//2) print(0-N//2)
をPython 2またはPython 3で実行すると、以下の結果が出力されます。
-50 -49
つまり、同じ結果になりません。
現象を読み解く
この現象は、単項演算子である'-'と、二項演算子である'-'とで優先順位が異なることが原因で起こっています。
演算子の優先順位 - 数値 - Python入門から、今回の式に関係のある演算子を抜粋すると以下のようになります。
(優先順位が高い) - (-は単項演算子) // - (-は二項演算子) (優先順位が低い)
これをもとに、先ほどのコードの優先順位を明示すると以下のようになります。
print((-N)//2) print(0-(N//2))
Pythonの//
演算子は、除算の結果が整数にならない場合は小さい方の整数に丸めるので、
(-99)//2は-50に、99//2は49に丸められることになります。このことから、冒頭のコードで2式の結果が一致しない理由が分かりました。