JAVA 二進位基礎

來源:互聯網
上載者:User

標籤:als   body   mic   one   turn   支援   正確答案   color   為什麼   

主要內容

1.十進位二進位互轉

2.二進位的位元運算

3.JDK內建的進位轉換

4.JAVA中的進位

十進位二進位互轉

57 111001

 

 

二進位的位元運算:優點:特定情況下,計算方便,被支援面廣泛。① 按位與& (兩位全位1,結果才為1)0與0=0;0與1=0;1與0=0; 1與1=1;例:51與500110011---------------00000101=00000001=1位元運算的特殊用法:*清零,取一個數中的指定位 ②按位或 | (只要有一個位位1,結果就為1)0|0=0; 0|1=1; 1|0=1; 1|1=1;例:51|5 =00110011---------------00000101=00110111 = 55或運算的特殊用法:常用來對一個資料的某些位置1; ③異或運算 ∧ (兩個相應位為“異”,則該結果為1,否則為0)0∧ 0=0; 0∧ 1=1; 1∧ 0=1; 1∧ 1=0;例:51∧ 5=00110011---------------00000101=00110110=54特殊用法:*使特定位翻轉*與0異或保留原值*取反運算(對一個位元按位取反,即將0變為1,1變為0) 利用與0異或,兩個變數交換值的方法:兩個變數交換值的方法有:1.藉助第三個變數C=A; A=B; B=C;2.利用加減法C=A+B; B=C-B; A=C-B;3.用位異或運算實現 (效率最高)A=A∧B; B =A∧B; A=A∧B; 左移運算<< (將一個運算對象的各二進位位全部左移若干位,左邊的二進位位丟棄,右邊補0)2<<1= 4 右移運算>>(將一個運算對象的各二進位位全部右移若干位,正數左補0,負數左補1,右邊丟棄) 無符號右移 負數以其正值的補碼形式表示 原碼:一個正數按照絕對值大小轉換成的二進位稱為原碼。 反碼 補碼:反碼加1稱為補碼 JDK內建的進位轉換:

 

JAVA中的進位:平時開發,進位轉換和位操作用的並不多,因為JAVA處理的是高層在跨平台中用的較多,檔案讀寫,資料通訊等。 基礎資料型別 (Elementary Data Type):int資料類: 1位元組= 8bitbyte(8bit,-128~127)short(16bit)int(32bit)long(64bit)float:單精確度32bit ,雙精確度64bitbolean:true 1bit,false 1bitchar:unicode字元 16位對應的封裝類:Integer...... 在JAVA裡面除去基礎資料型別 (Elementary Data Type)的其它類型都是引用資料類型,String是一個類,所以String不是基本類型而是參考型別。

資料類型轉換為位元組:int (8143)8143(00000000,00000000,00011111,11001111)=byte[]={-49,31,0,0}第一個位元組(低端) 8143>>0*8&0xff=(11001111)=207或有符號-49第二個位元組(低端) 8143>>1*8&0xff=(00001111)=31第三個位元組(低端) 8143>>2*8&0xff=(00000000)=0第四個位元組(低端) 8143>>3*8&0xff=(00000000)=0 byte轉int的時候為什麼非要先&0xff計算出來才是正確答案?首先,JAVA中的二進位採用的是補碼形式,並非原碼或反碼,這3個概念要搞清楚;其次,byte佔8位,int佔32位,將byte強制轉換為int型時,如果沒有做 & 0xff運算,且byte對應的值為負數的話,就會對高位3個位元組進行補位,這樣就有可能出現補位誤差的錯誤。舉例來說,byte型的-1,其二進位(補碼)為11111111(即0xff),轉換成int型,值也應該為-1,但經過補位後,得到的二進位為11111111111111111111111111111111(即0xffffffff),這就不是-1了,對吧?而0xff預設是int型,所以,一個byte跟0xff相與,會先將那個byte轉化成int型運算,這樣,結果中的高位3個位元組就總會被清0,於是結果就是我們想要的了~ 字串轉化為位元組資料 :String s; byte[] bs = s.getBytes();位元組數組轉化為字串:String s = new Stirng(bs);String s = new String(bs,encode);//encode指編碼方式 "gb2312,utf-8"
 1 public class Convert { 2  3     /** 4      * <<左移運算<<右移運算<<<無符號右移 5      */ 6  7     // int轉Byte[] 8     public static byte[] int2Bytes(int id) { 9         byte[] arr = new byte[4];10         arr[0] = (byte) ((int) (id >> 0 * 8) & 0xff);11         arr[1] = (byte) ((int) (id >> 1 * 8) & 0xff);12         arr[2] = (byte) ((int) (id >> 2 * 8) & 0xff);13         arr[3] = (byte) ((int) (id >> 3 * 8) & 0xff);14         return arr;15     }16 17     // Byte[]轉int18     public static int Bytes2int(byte[] arr) {19         int rs0 = (int) ((arr[0] & 0xff) << 0 * 8);20         int rs1 = (int) ((arr[1] & 0xff) << 1 * 8);21         int rs2 = (int) ((arr[2] & 0xff) << 2 * 8);22         int rs3 = (int) ((arr[3] & 0xff) << 3 * 8);23         return rs0 + rs1 + rs2 + rs3;24     }25 26     // long轉化為byte[]27     public static byte[] long4Bytes(long id) {28         byte[] arr = new byte[8];29         for (int i = 0; i < arr.length; i++) {30             arr[i] = (byte) ((int) (id >> i * 8) & 0xff);31         }32         return arr;33     }34 35     /**36      * byte[]轉化為long型和轉化int型一樣,只是long是64bit,而int是32bit37      */38     public static void main(String[] args) {39         byte[] arr = Convert.int2Bytes(8143);40         System.out.println(arr[0] + "\n" + arr[1] + "\n" + arr[2] + "\n" + arr[3]);41         int rs = Convert.Bytes2int(arr);42         System.out.println(rs);43 44         byte[] arr2 = Convert.long4Bytes(20);45         for (byte b : arr2) {46             System.out.println(b);47         }48 49         // 字串與位元組數組:50         String describle = "我是字串";51         byte[] barr = describle.getBytes();52         String des = new String(barr);53         System.out.println(des);54     }55 56 }
View Code

JAVA 二進位基礎

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.