真偽値としての true と false は、false が「0」とされている。そして、true は「false 以外」とされている。つまり、数値に変換するとき、false は必ず 0 だが、true は 0 以外のなんだってかまわない、ということ。
MSDN ライブラリで、Windows API の説明を見ると、「成功すると 0、失敗すると 0 以外を返します」と書いてあるものがある。ERROR_SUCCESS というマクロが、「‘エラー・成功’って、どういう意味よ?」はともかく、0L と設定されているからだ。LONG 型を返すものは、たいていこれ。戻り値がそのままエラーコードになる。
BOOL 型の場合、TRUE は 1 と定義されている。FALSE は 0。戻り値が BOOL の場合、GetLastError() 関数を使え、ということになっている。
そして、私の中で、真は -1 。
これは、昔の Microsoft BASIC の影響。Visual は付かない。N60 が付く(笑)
なぜ -1 なのか。符号付きだから。
2進数で考えたとき、偽は 0 なので、真は 1 しかない。どのビットで検査されても「偽ではない」を返そうとすると、すべてのビットが1で埋まる。これを符号付き10進数で表すと、-1 になる。
投稿日時 : 2007年10月17日 20:42