- ベストアンサー
ビット演算子~について。
質問があるのですがよろしくお願いします。 環境は Windows Home Editon PHP 5.2.0 Apache 2.2.3 です。 PHPのビット演算子、「~」についてなのですが、 http://wisdom.sakura.ne.jp/programming/php/php8.html このページを見ると、~が式のビットを全て反転させる演算子であると書いてあるのですが、 echo ~5; を実行すると、なぜかブラウザに表示されるのは-6です。 10進数の5を2進数に変換すると0101で、それを~演算子を使って反転させると1010なので、ブラウザに表示される数字は10であるべきではないのでしょうか。返り値が-6という負数になってしまうのも何故だか分かりません。 詳しい方いらっしゃいましたら、ご教授頂けると嬉しいです。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
PHPでは、例えばC言語における char型、short int型、long int型に相当するような 長さの異なる整数という概念がないと聞いたことがあります。 また、C言語のunsignedに相当する符号なし、という概念もないみたいです。 そういうわけで、4ビットだったらどう、8ビットだったらどう、という話はなくて、 十進数の5(二進数では00000000000000000000000000000101)を ビット反転させた値は 二進数で11111111111111111111111111111010となり、 十進数では-6となります。
その他の回答 (1)
- theisman
- ベストアンサー率47% (56/119)
2の補数表現を使うと、1010(2) = -6(10)になります。 ついでに言っておくと、4ビットで考えれば ~0101(2) = 1010(2) ですが、8ビットなら ~00000101(2) = 11111010(2) = 250(10) ですし、16ビットならまた違いますよ。
お礼
お礼が遅れて申し訳ありません。 回答くださった方々、ありがとうございました。 大変参考になりました。