1. 程式人生 > >java中的二進位制int與byte互轉以及&0xff的作用

java中的二進位制int與byte互轉以及&0xff的作用

1.      按位與&  :兩位全位1,結果才為1;

0&0=0;  0&1=0  ; 1&1=1

如:51 &5 =0011 0011 & 0000 0101=0000 0001 = 1

作用:清零、取一個數中指定位(即被與數0000)

2.      按位或| :只要有一個為1,結果就為1 ;

3.      異或^ :相同為0,不同為1 ;

0 ^ 0 =0 ; 0 ^1 = 1 ; 1 ^ 1=0;

作用:使特定位翻轉(^ 1111 即翻轉)

4.      取反運算 ~ :按位取反, 0變成1 ,1變成 0;

5.      <<左移運算 :將一個運算物件的各二進位制位全部左移若干位(左邊的丟棄,右邊的補0)

6.      >>右移運算:將一個數各二進位制位全部右移若干位,正數左補0,負數左補1,右邊丟棄。

7.      >>>無符號右移:各個位向右移指定的位數,左邊空出的位用0來填充,移出的右邊位丟棄。

以下都是對負數而言,正數的原碼、補碼、反碼都是其本身(原碼)。

8.      原碼:一個正數按照絕對值大小轉換成的二進位制數稱為原碼;

9.      反碼:將二進位制數按位取反。(符號位不取反)

10.   補碼:反碼+1;

11.   引入原碼反碼 和補碼的目的就是為了解決減法問題,因為計算機CPU的運算器中只有加法器,要把減法轉化成加法來計算。

   如“-16+11”的運算:

11110000     + -16的補碼

00001011       11的補碼

————

11111011       - 5的補碼

有了以上知識,下面做int和byte的互相轉換:

public static byte[] intToByte(int a){
		byte bt[]=new byte[4];
		bt[0]=(byte)((a>>0*8)&0xff);
		bt[1]=(byte)((a>>1*8)&0xff);
		bt[2]=(byte)((a>>2*8)&0xff);
		bt[3]=(byte)((a>>3*8)&0xff);
		return bt;
	}

	public static int byteToInt(byte[] a){
		System.out.println((int)a[0]);  //這裡輸出的是-49
		System.out.println((int)(a[0]&0xff));//這裡輸出是207
		int rs0=(int)((a[0]&0xff)<<0*8);
		int rs1=(int)((a[1]&0xff)<<1*8);
		int rs2=(int)((a[2]&0xff)<<2*8);
		int rs3=(int)((a[3]&0xff)<<3*8);
		int result=rs0+rs1+rs2+rs3;
		return result;
	}
發現一個奇怪的現象, 直接輸出(int)a[0]結果是-49,而(int)(a[0]&0xff)理論上不變,但是輸出的結果卻是207;

原來,java的int是4個位元組32位的,在控制檯進行輸出的時候,jvm把11001111之前進行了補全,補為11111111 11111111 11111111 11001111,顯然這是-49的補碼,輸出結果是-49;而如果進行了a[0]&0xff ,補全後則變成00000000 00000000 00000000 11001111,此時結果變成了207,這時進行運算結果才是正確的。

java中,轉換時int輸出時 若byte符號位是0,如01001000,則進行int補0處理--》00000000 00000000 00000000 01001000;

                                          若byte符號位是1,如11001000,則進行補1處理-->1111111 11111111 11111111 11001000

Ps: &0xff的作用就是把其他位置0,這八位不變;

      一些實用的函式:Integer.toBinaryString(8100);可以輸出二進位制碼;

         String s="abc";     byte[] bt = s.getBytes();可以得到字串的二進位制碼// s.getByte("utf-8")引數也可以指定編碼方式!

           for(byte b:bt){

         System.out.println(Integer.toBinaryString(b));//輸出二進位制碼 

    如果通過位元組序列變成string,可以通過String s=new String(bt,"asci"); 形式

相關推薦

java二進位制intbyte以及&0xff作用

1.      按位與&  :兩位全位1,結果才為1; 0&0=0;  0&1=0  ; 1&1=1 如:51 &5 =0011 0011 & 0000 0101=0000 0001 = 1 作用:清零、取一個數中指定位(即

Intbyte[]詳解分析

我先貼出最終轉換的程式碼,再來進行一步一步的介紹: /** * 將int數值轉換為佔四個位元組的byte陣列 * @param value * 要轉換的int值 * @return byte陣列 */ public static

C# int32byte[] / C/C++ intBYTE[]

在某些時刻,我們需要對32位的int型別資料轉換成byte資料進行傳輸、儲存等。 這時,就需要把 32位的int型別資料轉存到 4個位元組的byte陣列中,或者是從4個位元組的byte陣列中轉存為32位的int型別資料。 在C/C++中,我們可以直接使用memcpy()函式

javaintbyte的轉化

為什麽 基礎上 問題 操作 數組 相同 static turn 都是 java中的int與byte的轉化 1、基礎準備 1.1、原碼 就是二進制碼,最高位為符號位,0表示正數,1表示負數,剩余部分表示真值 1.2、反碼 在原碼的基礎上,正數反碼就是他本身,負數除符號位之外全

java stringbyte[]

string 轉byte[] 如1122轉{0x11,0x12} public static byte[] hexString2Bytes(String s) {         byte[] bytes;         bytes = new byte[s.lengt

JSONUtil(JAVA對象/Listjson,xmljson)

transpose boolean ngs final span arraylist setname clas pro 1 package com.chauvet.utils.json; 2 3 import java.io.BufferedReader;

BufferedImagebyte

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

BufferedImagebyte

                一、需要用到的類java.awt.image.BufferedImage;javax.imageio.ImageIO;java.io.*;二、為什麼要將BufferedImage轉為byte陣列在傳輸中,圖片是不能直接傳的,因此需要把圖片變為位元組陣列,然後傳輸比較方便;只需要

C intBYTE、字串十六進位制位元組陣列

//int 轉 4位元組 BYTE[], void intToByte(int i,BYTE abyte[])  { abyte[3] = (byte)(0xff & i); abyte[2] = (byte)((0xff00 & i) >>

sql server 和 oracle ,ip數字

(一)Oracle中: (1) IP轉為數字: createorreplacefunction ip2number(ip varchar2)    return number   is  

java的同步非同步(

經常看到介紹 ArrayList 和HashMap是非同步,Vector和HashTable是同步,這裡同步是執行緒安全的,非同步不是執行緒安全的,舉例說明: 當建立一個Vector物件時候, Vector ve=new Vector(); ve.a

opencv的Mat陣列

直接上程式碼,初步驗證測試正確,陣列形式與opencv的儲存方式一致為BGR。cv::Mat TransBufferToMat(unsigned char* pBuffer, int nWidth, int nHeight, int nBandNum, int nBPB =

mac字串byte工具類

#include <string> #include <iostream> using namespace std; class MAC_Convertor { public: static int ConvertXDigit2Number(

JavaScript JsonMap以及Map物件的取值方式

Json格式(Json字串) : var json='{"name": "lily","age":"15"}' Map格式: var map={name: "lily", age:"15"} Map取值: var name=map["name"]; 或 var

StringXML以及從XML取節點值並修改

讀取xml檔案生成Document物件 Document轉換成String型別串 String串轉成xml 已知xml節點取節點值 已知xml節點修改節點值 一個xml檔案: <?xml version="1.0" encoding="UTF-8"

javaintbyte相互轉換

基礎內容簡介      在做轉換之前先要明確幾個簡單的概念。首先本文是以java為語言,以int為例子。 long資料型別在原理上是一致的。      1  int 在java中是32位, byte是8位。      2  原碼,反碼,補碼簡介        

java整型字元型

1、字元型轉換成整型:  1.轉換成Int型 int/Integer num  =  Integer.parseInt(String str); 2.轉換成long型 Long/long num    =  Long.parseLong(String str); 3

Javaintbyte陣列

private static final int COMMAND_NO_READ_RESOURCE = 0x0224; HexUtil.intToBytes(COMMAND_NO_READ_RESOURCE, 2) /** * Transform integer ar

javaintbyte以及longbyte之間的轉換

轉載請註明出處! 做專案時候根據協議在傳送網路流的時候需要將所有int及long轉換成byte,因此寫了以下的轉換方法,希望能幫助到需要的朋友 ^_^ 閒話少說,直接上碼。 public cla

Javanet.sf.json包關於JSON物件的坑

在Web開發過程中離不開資料的互動,這就需要規定互動資料的相關格式,以便資料在客戶端與伺服器之間進行傳遞。資料的格式通常有2種:1、xml;2、JSON。通常來說都是使用JSON來傳遞資料。本文正是介紹在Java中JSON與物件之間互相轉換時遇到的幾個問題以及相