−0℃
まぁ、そういうCMがあるんで。別に批判とかじゃないです。
昔々、計算機で負の値を扱うのにはいくつか方法がありました。
一つは、符号桁を設ける方法です。
たとえば、000という3桁の2進数を考えます。
これで001だと、1を現わすものとします。それに対して101だと、-1を現わすものとします。で、001+101ってのは、1-1=0のはずですが、001+101=110となり、-2になっちゃいます。桁を別扱いしていろいろやってやんないといけない。不便です。
あるいは1の補数ってのがあります。001の各ビットを反転させた、110が-1を現わすものです。001+110=111になります。この111って何なんでしょう? 簡単にこの各ビットを反転させると、000になります。つまり、111ってのは-0なんです。0と-0が別ってのは不便。てか、それって何? となります。それが必要なら、それを使った方が便利なんですが。だいたいそういうのは使わない。
昔々は、「0と0を比べてるはずなのに、なんでおかしくなるんだ?」とかいうこともありましたが、それは「0と-0を比べてた」からだったりします。コンパイラかどっかで0と-0が同じという処理を入れといてくれないと、そりゃ別の値という扱いになります。
んで、今、たぶん普通に使われてるのは2の補数ってやつ。細かいことは面倒だから飛ばして、1の補数に対して、1を足してやったものを求めると2の補数になります。
この場合、1の補数での001+110の結果である111に+1してやると、1ビット、オーバーフローするけど、それを無視すれば000になります。もちっと戻って、001の2の補数を求めると、1の補数が110だから、それに1を足した111が-1になります。これで、001+111を計算すると、1ビット、オーバーフローするけど、それを無視すればやっぱり000になります。0と-0とが別物になんない。0は0。んー、便利。
まぁ、そんことを思い出したので、書いときました。




