Cでcompareが-1,0,1を返す理由

2015年5月11日月曜日

C Java

JavaのAPIリファレンスでBigDecimalのcompareToを見ていて気づいたのだけれど、
BigDecimalの値の大小を比較する際には以下のように行えとある。
BigDecimal bd = ...

...

// bd > 1
if (bd.compareTo(BigDecimal.ONE) > 0) {

// bd == 1
} else if (bc.compareTo(BigDecimal.ONE) == 0) {

// bd < 1
} else if (bc.compareTo(BigDecimal.ONE) < 0) {

...

特に驚くようなこともないけれど、一歩引いて考えてみると
記法としてはとても巧妙なものだと気づく。
つまり、右辺を0にすると比較演算子がそのままcompareToの比較関係を表しているのだ。
演算子オーバーロードに似ていると言ったら言いすぎだろうか。

Cでstrcmpやmemcmpが-1,0,1を返すのはまあそんなもんかなくらいに思っていたけど、
なんだか理由がわかった気がする。