JAVA 數據類型和多種運算符小結

java 數據類型 

引用類型
基本數據類型:
    boolean   佔 1 個二進制位  
    byte         8
    char         16
    short        16
    int          32
    long         64
    float        32
    double       64

第一個二進制位表示符號位 0 表示 正數,1 表示爲負數.

對於單精度浮點數來說第一個二進制位表示符號位,後2-9個二進制位用來表示指數,後23個二進制位則用來表示尾數。

浮點數進行運算是有可能是會損失精度的,例如:
System.out.println(1.0 - 0.9);
//結果爲 0.09999999999999998

出現這種情況的原因爲:java 中浮點默認是用 double 類型的,計算機在處理數據的時候先把數據轉爲二進制,但是小數轉二進制就會損答精度,例如:0.1(十進制) 要轉到二進制,

0.1 * 2 = 0.2  取 正數部份  0 
0.2 * 2 = 0.4             0
0.4 * 2 = 0.8             0
0.8 * 2 = 1.6             1
0.6 * 2 = 1.2             1
0.2 * 2 = 0.4             0
......                    ......

這樣是永遠不會等於零的,就像10 除以 3 一樣,無限循環,但是double類型的數據只佔那麼多個二進制位,所以在在轉向二進制的時候就相對數值會小一點點(非常小),所以結果會出現 0.09999999999999998這樣的結果,JDK 會提供了一個可以求任意精度數值的一個類——BigDecimal。

float f1 = 1.22222222222222222222222222222222222222222222222f;
        float f2 = 1.00000000000000000000000000000000000000000000001f;
        System.out.println("f1 - f2 = "+(f1 - f2));

        BigDecimal b1 = new BigDecimal("1.22222222222222222222222222222222222222222222222");
        BigDecimal b2 = new BigDecimal("1.00000000000000000000000000000000000000000000001");
        BigDecimal subtract = b1.subtract(b2);
        System.out.println("b1 - b2 = "+subtract);
//打印的結果
//f1 - f2 = 0.22222221
//b1 - b2 = 0.22222222222222222222222222222222222222222222221

&與運算

&& 短路與


        int i = 1;
        if (i > 0 & i++ > 1) {

        }
        System.out.println(i);

        int j = 1;
        if (j < 0 && j++ > 1) {

        }
        System.out.println(j);

//打印結果:  2 1

與運算符會兩邊的表達示都會進行計算,就算編繹器知道了第一個表達式爲false,而短路與則不同,在上述例子中 當 j < 0 是等於 false 時,這時整個表達式己經確定爲false 了,所以編繹器對第二個表達式是不進算運算的,所以打印的結果爲 n = 1


^ 異或運算符

int a = 3;
int b = 4;
System.out.println(a ^ b);
//打印結果: 7
 011
^100
 111
 異或運算當兩個二進制位相同則等於0,不相同則等於1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章