一、二進位的概念
計算機進位有:二進位、八進位、十六進位
進位的基本特點是:每一位置上的數字必須在0-(進位-1)的範圍內,也就是說二進位只能有0、1;八進位為:0-7;十六進位比較特殊為:0-9,A(10) B(11) C(12) D(13) E(14) F(15)
進位轉換:
1、非十進位轉換十進位:每位數字乘以進位數的權重次方,將所有位置上的結果進行求和即可。
進位的權重:一個數值,在每一位都有一個權重,權重為從右向左數,位數-1
進行轉化: 舉例:將二進位011轉10進位為:從右向左,1*2的0次方+1*2的1一次方+0*2的2次方=3; 將八進位34轉化成10進位:4*8的0次方+3*8的1次方=28
2、十進位轉非十進位: 採用短除法: 用十進位數除以要轉化的進位數,用本次除法的商繼續進行除以要轉化的進位數的除法運算,一直到商為0,保留每次除法的餘數,將餘數按照從後往前進行排序,即為最終轉化後的數。
舉例:將10進位100轉化成八進位數: 十進位 100: 100/8(進位數) 商:12 餘數 4 繼續用上次的商12除以8:12/8 商:1 餘數 4 繼續用上次的商1除以8:1/8 商:0 餘數 1 商為0,停止運算,將餘數從後往前排序:144 得到最終轉化後的八進位為144。 十進位轉十六進位同理
二、位運算
優點:
(1)特定情況下,計算方便,速度快,被支持面廣
(2)如果用算數方法,速度慢,邏輯複雜
2.1、按位與&
兩位全為一,結果才為1
0&0=0;0&1=0;1&0=0;1&1=1;
用法:
(1)清零,如果想要將一個單元清零,即使其全部二進位位0,只要與一個各位都為零的數值相與,結果位零
(2)取一個數中指定位,找一個數,對應X要取的位,該數的對應位為1,其餘為零,此數與X進行「與運算」可以得到X中的指定位
2.2、按位或|
只要有一個為1,結果就為1
0|0=0;1|0=1;0|1=1;1|1=1;
用法:常用來對一個數據的某些位置設為1,找到一個數,對應X要設置為1的位,該數的對應位為1,其餘位為零,此數與X想與可使X中某些位設置為1
2.3、異或運算^
兩個相應位為「異」(值不同),則改位結果為1,否則為0
0^0=0;0^1=1;1^0=1;1^1=0;
用法:
(1)使特定位翻轉 找一個數,對應X要翻轉的各位,該數的對應位為1,其餘位為0,此數與X對應位異或即可
(2)與0相異或,保留原值
兩個變量交換值
(1)藉助第三個變量來實現
(2)利用加減法實現兩個變量的交換
A=A+B;B=A-B;B=A-B
(3)異或運算
任意一個變量X與其自身進行異或運算,結果為0
A=A^B;B=A^B;A=A^B
2.4、取反運算~
對一個二進位數按位取反,即將0變1,1變0
~1=0;~0=1;
2.5、左移運算<<
將一個運算對象的各二進位位全部左移若干位(左邊的二進位位丟棄,右邊補0)
2<<1=4
若左移時捨棄的最高位不包含1,則每左移一位,相當於該數乘以2
2.6、右移運算>>
將一個數的二進位位全部右移若干位。正數左補0,負數左補1,右邊丟棄。 每右移1位,相當於除以2.
左補0還是1得看被移數是正還是負
2.7、無符號右移運算>>>
各位向右移動指定位數。右移後的左邊空出位用0補。右邊的位被丟棄。 與>>的不同。 >>>不管正數負數。左邊只會補0; >>正數補0,負數補1
2.8、示例
原碼:一個整數按照絕對值大小轉換成的二進位數稱為原碼
反碼:將二進位數按位取反,取得的新二進位數稱為原二進位數的反碼。
補碼:反碼加1稱為補碼
三、JDK內置的進位轉換
四、JAVA中的進位
JAVA中二進位用的多嗎?平時開發中「進位轉換」和「位操作」用的不多,Java處理的是高層;在跨平臺中用的較多,如:文件讀寫,數據通信(客戶機(java)——0.1進位——伺服器(C))。
基本類型:int型數據類型:byte(8bit -128~127)1 short(16bit)2 int(32bit)4 long(64bit)8位元組float數據類型:單精度(32bit float)4位元組 雙精度(64bit double)boolean類型變量的取值:true false 1bitchar數據類型:Unicode字符,16位 2位元組對應的類類型:Byte Short Integer Long Float Double Boolean Character
數據類型轉換字節:1.大小端:
小端法:低位字節排放在內存的低地址端即該值的起始地址,高位字節排放在內存的高地址端大端法:高位字節排放在內存的低地址端即該位置的起始地址,低位字節排放在內存的高地址端2.字符串->字節數組:String s ; byte [] bs = s.getBytes();字節數組->字符串:byte[] bs = new byte[int]; String s = new String(bs); 或String s = new String(bs,encode); //encode指編碼方式:gb2312, utf8