日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java中的byte & 0xff到底有什么作用?

瀏覽:112日期:2022-08-10 08:41:26

如果寫過通信類的代碼,比如socket編程,應該對這個問題不陌生。

先說結論

byte & 0xff 是將byte從(-128 至 127)轉化成 int(轉化后的數值范圍: 0 至 255)。

其實就是1個byte有兩種表示方法,我們既可以用-128 - 127這段范圍來表示一個字節,也可以用 0 - 255這個范圍的數來表示一個字節。

看一個demo

用Java中的InetAddress類來獲取我當前的ip

public class InetAddressTest { public static void main(String[] args) throws UnknownHostException {InetAddress localHost = InetAddress.getLocalHost();byte[] address = localHost.getAddress();for (byte b : address) { System.out.print(b + ' ');} }}

輸出結果

-64 -88 2 119

本機ip

Java中的byte & 0xff到底有什么作用?

好像不太一樣,我們ip地址只用 0 - 255來表示,不會出現負數。

所以再換一種寫法,將取出來的字節 & 0xff

public class InetAddressTest { public static void main(String[] args) throws UnknownHostException {InetAddress localHost = InetAddress.getLocalHost();byte[] address = localHost.getAddress();for (byte b : address) { System.out.print( ( b & 0xff ) + ' ');} }}

結果

192 168 2 119

Process finished with exit code 0

果然就是我們想要的結果

為什么需要轉換

因為Java中的byte是有符號的,他的范圍只能是 -128 - 127。

我們在使用tcp等協議的時候,首先要把傳輸的消息轉化成字節流,然后再傳輸,在編程語言中字節流通常用十進制的byte數組來表示。

Java中的byte & 0xff到底有什么作用?

假如我們就想用 0-255來表示一個字節,不想用負數,該怎么辦呢?

可惜Java中沒有 無符號字節(unsigned byte), 我們只能用 int 來存儲0-255。

而int的范圍是(-2^31 ~ 2^31-1),只用了256個,剩下的空間都被浪費了,得不償失啊。

所以我們存儲的時候、傳輸的時候可以用byte,但是使用的時候就需要做一個轉換了,那為什么0xff就可以得到無符號byte呢。

& 0xff的作用

作為一個十六進制數,0xff在Java中是用什么類型存儲的呢?

Java中的byte & 0xff到底有什么作用?

應該顯而易見吧,0xff是整型。

假設我現在要轉化 字節 -1

-1的原碼、反碼、補碼分別如下:

原碼 1 0 0 0 0 0 0 1反碼 0 1 1 1 1 1 1 0補碼 0 1 1 1 1 1 1 1

現在和 0xff做運算, ff 就是(1111 11111),而因為他是整型,占4個字節,32為,所以0Xff的前面還有24個0。

用 -1 的補碼進行計算

-1 0 1 1 1 1 1 1 10xff 000000000 000000000 000000000 1 1 1 1 1 1 1 1=000000000 000000000 000000000 0 1 1 1 1 1 1 1=255

其實在Java中,”任何數 & 0Xff等于那個數本身“ 這句話就顯得不那么正確了

”任意整型 & 0xff = 本身“ 是沒有問題的

但是字節 & 0xff 就被拖到了另一個次元,從byte進化成了int。

關于byte[ ] & 0xFF的問題

最近在寫有關SHA256加密解密的問題,發現有一段代碼是這樣的,處于好奇理解了一下。

private static String byte2Hex(byte[] bytes){ StringBuffer stringBuffer = new StringBuffer(); String temp = null; for (int i=0;i<bytes.length;i++){ temp = Integer.toHexString(bytes[i] & 0xFF); if (temp.length()==1){ //1得到一位的進行補0操作 stringBuffer.append('0'); } stringBuffer.append(temp); } return stringBuffer.toString(); }

Integer類中toHexString方法的參數是int類型,為什么byte[ ] & 0xFF可以表示int類型呢?

byte[i]是8位二進制,0xFF轉化為8位二進制為11111111,& 之后的結果還是本身啊,這是怎么回事?

我們都知道計算機內的存儲都是利用二進制的補碼進行存儲的。

復習一下,原碼反碼補碼這三個概念

對于一個字節的最高位,計算機中是有規定的,正數的最高位為0,負數的最高位為1。

對于正數(00000001)原碼來說,首位表示符號位,反碼 補碼都是本身

對于負數(100000001)原碼來說,反碼是對原碼除了符號位之外作取反運算即(111111110),補碼是對反碼作+1運算即(111111111)

下面寫段代碼測試下

public static void main(String[] args) { byte[] a=new byte[10]; a[0]=-127; System.out.println('a[0]:'+a[0]); int b=a[0] & 0xFF; System.out.println('b:'+b); }

得到的結果為:

a[0]:-127

b:129

現在針對這個結果進行分析:

byte類型的a[0]的值為-127,在計算機中存儲的補碼為:10000001,這個補碼是8位的,而int類型是32位的,所以a[0]作為int類型來輸出的時候jvm給做了個補位便成了 111111111111111111111111 10000001(-127),雖然補碼轉換了,但是這兩個補碼表示的十進制數字是相同的。

為了保證二進制數據的一致性,當byte要轉化為int的時候,高的24位必然會補1,這樣,其二進制補碼其實已經不一致了,如果二進制被當作byte和int來解讀,其10進制的值必然是不同的,因為符號位位置已經發生了變化,而&0xFF可以將高的24位置為0,低8位保持原樣。

int b = a[0]&0xff; a[0]&0xff=1111111111111111111111111 10000001&11111111=000000000000000000000000 10000001 ,這個值就是129

所以最后顯示的b的值為129

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产在线观看www| 日韩精品一级| 日韩中文字幕视频网| 国产二区精品| 香蕉国产精品| 亚洲精品极品| 国产精品99久久免费观看| 国产免费播放一区二区| 精品网站aaa| 不卡一区2区| 亚洲人成亚洲精品| 欧美日韩亚洲一区三区| 久久精品国产久精国产爱| 欧美激情福利| 麻豆精品蜜桃视频网站| 精品国产亚洲日本| 亚洲黄色免费看| 日韩午夜av| 国产精品午夜一区二区三区| 国模大尺度视频一区二区| 久久激情婷婷| 日韩一区二区三区高清在线观看| 国产精品日韩精品中文字幕| 国产成人免费| 欧美午夜不卡| 中文字幕一区二区av| 日韩精品第二页| 国产一区二区三区四区二区| 日韩在线精品| 亚洲一区二区三区四区电影| 国产精品亚洲产品| 亚洲国产影院| 国产精品一区二区精品| 日韩一区二区三区免费播放| 另类av一区二区| 麻豆视频久久| 五月亚洲婷婷 | 天堂网在线观看国产精品| 蜜臀av一区二区在线免费观看| 老司机精品视频在线播放| 亚洲欧美日韩国产| 欧美亚洲日本精品| 日本少妇精品亚洲第一区| 欧美日韩国产高清电影| 国产精品v一区二区三区| 亚洲综合电影一区二区三区| 国产激情在线播放| 国产精品va| 亚洲我射av| 欧美日韩高清| 亚洲午夜黄色| 色综合www| 亚洲大片在线| 最近高清中文在线字幕在线观看1| 亚洲精品亚洲人成在线观看| 免费观看不卡av| 狠狠干成人综合网| 日韩视频久久| 久久亚洲影院| 日韩精品一级中文字幕精品视频免费观看| 新版的欧美在线视频| 蜜桃视频在线网站| 日韩欧美不卡| 欧美成人精品| 亚洲激情中文在线| 日韩亚洲精品在线| 欧美在线综合| 青草综合视频| 精品视频自拍| 日韩精品一卡| 久久午夜视频| 国产欧美二区| 91看片一区| 99国产精品| 日韩一区二区三区精品| 国产精品玖玖玖在线资源| 久久久久九九精品影院| 九九色在线视频| 免费观看久久久4p| 老鸭窝毛片一区二区三区| 蜜桃传媒麻豆第一区在线观看| 亚洲小说春色综合另类电影| 欧美一区在线观看视频| 中文字幕一区久| 日韩在线网址| 91av亚洲| 日韩久久一区| 中文字幕系列一区| 91精品丝袜国产高跟在线| 激情亚洲影院在线观看| 日韩综合小视频| 欧美午夜精彩| 国产欧美综合一区二区三区| 日韩精品一区二区三区免费观影| 欧美专区一区二区三区| 国产在线视频欧美一区| 日韩精品一区第一页| 中文字幕在线免费观看视频| 日本a级不卡| 合欧美一区二区三区| 国产a久久精品一区二区三区| 视频一区二区中文字幕| 成人精品亚洲| 国产精品毛片久久| 国产精品777777在线播放| 六月天综合网| 欧美网站在线| 伊人久久大香线蕉av不卡| 久久亚洲精品中文字幕| 中文在线一区| 黑丝美女一区二区| 麻豆精品蜜桃| 精品一区二区三区在线观看视频 | 免费人成在线不卡| 国产在线|日韩| 久久精品一区二区国产| 少妇精品久久久| 国产精品日韩| 日韩天堂在线| 日韩欧美一区二区三区在线观看| 久久97视频| 日韩综合小视频| 日韩激情综合| 日韩一区网站| 91成人精品在线| 日韩有码av| 日韩成人午夜精品| 日本精品国产| 日本亚洲最大的色成网站www | 日韩一区二区在线免费| 精品国产成人| 色偷偷色偷偷色偷偷在线视频| 国产精品99久久精品| 国产成人精品999在线观看| 精品久久久中文字幕| 精品国产精品国产偷麻豆| 国产精品久久久久蜜臀| 99久精品视频在线观看视频| 婷婷久久一区| 亚洲1区在线| 精品一区av| 久久精品免费一区二区三区| 国产精品99一区二区| 伊人国产精品| 精品国产不卡一区二区| 日韩电影免费在线观看| 欧美日韩水蜜桃| 亚洲精品少妇| 国内精品亚洲| 亚洲一区免费| 麻豆国产欧美一区二区三区 | 欧美在线网站| 国产乱码精品一区二区亚洲| 成人午夜亚洲| 综合一区二区三区| 国产成人1区| 日本一区二区中文字幕| 久久国产婷婷国产香蕉| 欧美午夜精彩| 欧美韩一区二区| 天堂成人免费av电影一区 | 久久精品91| 国产精品一卡| 国产免费成人| 国产福利91精品一区二区| 亚洲精品动态| 国产一区久久| 国产精品久久观看| 日av在线不卡| 成人自拍av| 国产欧美久久一区二区三区| 亚洲美洲欧洲综合国产一区 | 日韩激情中文字幕| 午夜影院欧美| 99久久99久久精品国产片果冰| 国产精品入口久久| 亚洲69av| 亚洲人成网77777色在线播放| 欧美aa国产视频| 电影亚洲精品噜噜在线观看| 欧美一区网站| 国产精品毛片| 伊人久久亚洲热| 99免费精品| 亚洲播播91| 久久中文字幕二区| 91精品国产调教在线观看 | 日韩精品视频一区二区三区| 亚洲综合另类| 中文字幕日韩亚洲| 蜜桃91丨九色丨蝌蚪91桃色| 久久午夜精品| 日本免费新一区视频| 久久精品超碰| 久久精品999| 精品一区二区三区视频在线播放| 精品欧美日韩精品| 欧美sss在线视频| 欧美日韩国产在线观看网站| 99在线|亚洲一区二区|