Java中的數據類型,不同進制之間的轉換,位運算

1,計算機中的存儲單位 bit和byte

  • 計算機就是一系列的電路開關,每個開關存在兩種狀態開和關,如果電路是開着的它的值就是1,關就是0。
  • 一個1或者0存儲爲一個bit(比特),它是計算機中最小的存儲單位。
  • 計算機中最基本的存儲單元是byte(字節),每個字節由8個比特組成。
  • 存儲單位的換算:
    單位 換算
    千字節 KB 1024B
    兆字節 MB 1024KB
    千兆字節 GB 1024MB
    萬億字節 TB 1024GB

2,Java中的數據類型

  • 基本數據類型
    • 數值型
      • 整數型
        • byte 1個字節 表示範圍-128–127
        • short 2個字節 表示範圍 -32768–32767
        • int 4個字節 表示範圍 -2的31次方 – 2的31次方 (約21億)
        • long 8個字節 -2的63次方 – 2的63次方
          • 範圍小的轉爲範圍大的 ,精度不會丟失,範圍大的轉換爲範圍小的,,如果在數值在範圍小的類型的表示範圍內精度不會丟失,超過會造成精度丟失。
      • 浮點型
        • float 4個字節
        • double 8個字節
    • 字符型
      • char 2個字節
    • 布爾型
      • boolean 1個字節
  • 引用數據類型
    • 類(Class)
    • 數組(array)
    • 接口(interface)

3,Java中的位運算

1,Java中的位運算

名稱 符號 運算結果
左移 << 空位補0,被移除的高位丟棄,空缺位補0。如果第一個1的高位沒有移出,左移一位相當於乘以2;
右移 >> 被移位的二進制最高位是0,右移後,空缺位補0,最高位是1,空缺位補1, 右移一位相當於除以2,如果最高位是0,右移一位相當於除以2;
無符號右移 >>> 被移位二進制最高位無論是0或者是1,空缺位都用0補;
按位或 | 二進制位進行|運算,只有0|0返回0,1其他都返回1,按位或後數值變大,與0或還是本身;
按位與 & 二進制位進行&運算,只有1&1時結果是1,否則是0;按位與後數值變小,與-1與後還是本身;
異或 ^ 相同位上的位相同則返回0,不同則返回1,結果變大或者變小;
取反 ~ 正數取反,各二進制碼按補碼各位取反,負數取反,各二進制碼按補碼各位取反,取反後的值爲其+1後取反,,即3按位取反後值爲-4;

2,在Java中將基本數據類型轉換爲byte[ ] 數組(字節數組),以int類型位例;

    public static byte[] IntegerToByteArray4(Integer num){

        byte[] bytes = new byte[4];
        log.debug("需要轉換爲四字節數組的數字:{}, 此數字的16進製表示爲:{}", num, Integer.toHexString(num));

        bytes[0] = (byte) (num >> 24);
        bytes[1] = (byte) (num >> 16);
        bytes[2] = (byte) (num >> 8);
        bytes[3] = (byte) (num | 0x00);
        return bytes;
    }


    public static byte[] getBytesX(int data) {
        byte[] bytes = new byte[4];
        bytes[0] = (byte) ((data & 0xff000000) >> 24);
        bytes[1] = (byte) ((data & 0xff0000) >> 16);
        bytes[2] = (byte) ((data & 0xff00) >> 8);
        bytes[3] = (byte) (data & 0xff);
        return bytes;
    }

在上面demo中,,將int轉換爲byte[]數組的運算結果相同,,getBytesX工具類轉換時先將int數據和0xff000000進行與運算,最高的8位和0xff進行與運算後最高位其實沒有變化,,然後在右移24位,,將最高的8位封裝到byte[0]中,而IntegerToByteArray4工具類中沒有進行位運算,直接進行位移,兩個結果相同。

圖解(因爲圖放不下32個格,畫了20個代替,只看前8位,後面的道理相同)

0 1 1 1 0 0 0 1 1 0 0 1 0 0 1 0 0 1 1 1
1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0

右移24位後的後前8位變成後8位,將後八位放的byte[0]的位置;
result

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章