Java中正数与负数操作、的区别
以下為個人理解,有不對的地方請提出
Java中,>>、>>>都是在數字的二進制的補碼中進行的
正數的補碼為本身 如
33的二進制表示為?00000000 00000000 00000000 00100001?補碼為?00000000 00000000 00000000 00100001
負數的補碼為符號位即最高位1不變(負數符號位為1,正數為0),其余各位取反,再加1 如
-33的二進制表示為?10000000 00000000 00000000 00100001?補碼為?11111111 11111111 1111111 11011111
進行右移>>操作
33>>5 即 補碼?00000000 00000000 00000000 00100001?右移5位?00000000 00000000 00000000 00000001?
因為33為正數,再取補碼為?00000000 00000000 00000000 00000001?轉為十進制為1 即33>>5=1
-33>>5 即 補碼?11111111 11111111 1111111 11011111?右移5位?00000111 11111111 11111111 11111110
因為-33為負數,再取補碼為 00000100 0000000 0000000 00000010 最前一位1為符號位 轉為十進制為-2 即-33>>5=-2
進行無符號右移>>>操作
33>>>5 即 補碼?00000000 00000000 00000000 00100001?右移5位?00000000 00000000 00000000 00000001?
因為無符號位,代表結果肯定為正數,正數取補碼為本身?00000000 00000000 00000000 00000001?轉為十進制為1 即33>>>5=1
-33>>>5 即 補碼?11111111 11111111 1111111 11011111?右移5位?00000111 11111111 11111111 11111110
因為無符號位,代表結果肯定為正數,正數取補碼為本身?00000111 11111111 11111111 11111110?轉為十進制為134217726 即-33>>>5=134217726
?
?
?
[java]?view plaincopy?
以上為個人理解,如有不對的地方,請各位指正。
轉載于:https://www.cnblogs.com/daojian/p/4910568.html
總結
以上是生活随笔為你收集整理的Java中正数与负数操作、的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QueryDSL基本操作demo
- 下一篇: C语言数据结构与算法 项目实战 教学视频