天天看點

java學習筆記--二進制基礎

1、二進制位運算

&:與運算6&3=2

|:或運算6|3=7

^:異或運算6^3=5

~:反碼~6=-7

<<:左移3*2=6

“>>”:右移3/2=1

“>>>”:無符号右移3/2=1

2、二進制計算的優點

特定情況下,計算友善,速度快 ,被支援的面廣

采用算數方法,速度慢,邏輯複雜

3、位運算的使用

&:清零、取特定的位

|:置一

^:是特定位反轉(特定位與1異或)、與0相異或保留原值

交換兩個變量的值:

(1)借助中間變量

(2)利用加減法實作

A=A+B;B=A-B;A=A-B

(3)用位異或實作,效率最高

原理:利用一個數異或本身等于0,和異或運算符合交換率

如:A=A^B;B=A^B;A=A^B

4、java内置的進制轉換

十進制轉化成其他進制:

Integer.toBinaryString(112);//2進制

Integer.toHexString(112);//16進制

Integer.toOctalString(112);//8進制

其他進制轉換成十進制:

Integer.parseInt(“121001”,2);//2進制

Integer.parseInt(“27”,8);//16進制

Integer.parseInt(“A8”,16);//8進制

5、位元組序列和字元串的轉換的編碼問題

package com.imooc.file;

import java.io.UnsupportedEncodingException;

public class EncodeDemo {

    public static void main(String[] args) throws UnsupportedEncodingException {
        String s = "慕課ABC";
        byte[] bytes1 = s.getBytes();//轉換成位元組序列用的是預設的 編碼gbk
        for (byte b : bytes1) {
            //把位元組(轉換成了int)以十六進制的形式顯示
            System.out.print(Integer.toHexString(b&)+" ");
        }
        //gbk編碼
        System.out.println();
        byte[] byte2 = s.getBytes("gbk");
        //gbk編碼中文占用兩個位元組,英文占用一個位元組
        for (byte b : byte2) {
            System.out.print(Integer.toHexString(b&)+"  ");
        }

        //utf-8編碼
        System.out.println();
        byte[] byte3 = s.getBytes("utf-8");
        //utf-8中中文占三個位元組,英文占一個位元組
        for (byte b : byte3) {
            System.out.print(Integer.toHexString(b&)+" ");
        }

        //java是雙位元組編碼,utf-16be
        System.out.println();
        byte[] byte4 = s.getBytes("utf-16be");
        //utf-16be中文占兩個位元組,英文占兩個位元組
        for (byte b : byte4) {
            System.out.print(Integer.toHexString(b&)+" ");
        }

        /**
         *當你的位元組序列是某種編碼時,當将位元組序列程式設計字元串時,
         *也需要使用這種編碼否則會出現亂碼
         */
        System.out.println();
        String str1 = new String(byte4);//用項目預設編碼
        System.out.println(str1);

        //使用utf-16be編碼
        System.out.println();
        String str2 = new String(byte4,"utf-16be");
        System.out.println(str2);

        /**
         * 文本檔案 就是位元組序列
         * 可以是任意編碼的位元組序列
         * 如果我們在中文機器上直接建立文本檔案 ,那麼該文本檔案隻認識ansi編碼方式
         * 聯通、聯(utf-8)的txt是亂碼,聯想txt不是亂碼(ansi)這是一種巧合
         */

    }

}
           

一個項目可以設定編碼方式