其他運算符
# 算術運算符
+、-、*、/、++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