Java の int型 は符号付 32bit だから・・・
int i = (1 << 31) は i = -2,147,483,648 である さらに -1 ってことは・・・ 実行結果は i = 2,147,483,647 正の数になってる・・・ 16進数で考えると int i = (1 << 31) は i = 0x80000000 だし・・・ -1 は2の補数で 0xFFFFFFFF だから・・・ 和を取ると最上位ビットが桁あふれして・・・ i = 0x7FFFFFFF となるから・・・ i = 2,147,483,647 となるのか でも感覚的には・・・ int i = ~(1 << 31) のように シフト演算の後1の補数(ビット反転)にした方が・・・ でも簡単な演算の場合 シフト演算より四則演算の方が速い・・・って 聞いたこともあるから・・・ どっちがいいのだろ??? PR |
![]() |
![]() |
![]() |
|
![]() |
トラックバックURL |
![]() |
忍者ブログ [PR] |