Java 位運算符和 int 類型的實現


其他運算符

# 算術運算符
+、-、*、/、++i、i++、--i、i--

# 關系運算符
==、!=、>、<、>=、<=

# 邏輯運算符
&&、||、!

# 賦值運算符
=、運算符=
 
<!-- more -->
 

# 其他運算符
## 三元運算符
bool表達式 ? x : y
## instanceof 運算符
boolean result = var instanceof classname;

位運算符

  • &
  • |
  • ^ 異或
  • 按位取反
  • << 左移運算符,向左移動指定位數,一般情況下每移動一位都會乘以2
  • >> 右移運算符,向右移動指定位數,一般情況下每移動一位都是除以2
  • >>> 按位右移補零操作符

Java int 的實現

  • int 基本信息
    Java 中 int 為32 位,是基本類型的一種,對應包裝類為Integer
    Java 不存在無符號類型,int 由0、1~231-1、-1~(-2)31 三部分組成

  • 負數如何表示?
    負數部分使用補碼表示
    補碼:原碼按位取反得到反碼,反碼加一得到補碼

  • 正整數部分少一個數
    因為 1····0 的補碼為其本身,這是一個負數,一個二進制數總能表示偶數個數字,使用了0之后負數能比正數多表示一個,就是 1····0。

重點,Java 中int 位移的特殊情況

根據 int 實現的原理,int 移位會產生一些特殊情況,如:

2147483647<<1 的結果為 -2,為什么呢?因為 2147483647 為 2^31-1(2的31 次方減1),即:0111,1111,1111,1111,1111,1111,1111,1111,當它向右移位得到的結果是 1111,1111,1111,1111,1111,1111,1111,1110,此時對於 Java 來講,這已經是一個負數了

要先減去1 得到 1111,1111,1111,1111,1111,1111,1111,1101,再取反得到 0000,0000,0000,0000,0000,0000,0000,0010 也就是 2,所以結果是-2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM