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

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

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

先說結(jié)論

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

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

看一個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 + ' ');} }}

輸出結(jié)果

-64 -88 2 119

本機ip

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

好像不太一樣,我們ip地址只用 0 - 255來表示,不會出現(xiàn)負數(shù)。

所以再換一種寫法,將取出來的字節(jié) & 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 ) + ' ');} }}

結(jié)果

192 168 2 119

Process finished with exit code 0

果然就是我們想要的結(jié)果

為什么需要轉(zhuǎn)換

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

我們在使用tcp等協(xié)議的時候,首先要把傳輸?shù)南⑥D(zhuǎn)化成字節(jié)流,然后再傳輸,在編程語言中字節(jié)流通常用十進制的byte數(shù)組來表示。

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

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

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

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

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

& 0xff的作用

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

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

應(yīng)該顯而易見吧,0xff是整型。

假設(shè)我現(xiàn)在要轉(zhuǎn)化 字節(jié) -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

現(xiàn)在和 0xff做運算, ff 就是(1111 11111),而因為他是整型,占4個字節(jié),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中,”任何數(shù) & 0Xff等于那個數(shù)本身“ 這句話就顯得不那么正確了

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

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

關(guān)于byte[ ] & 0xFF的問題

最近在寫有關(guān)SHA256加密解密的問題,發(fā)現(xiàn)有一段代碼是這樣的,處于好奇理解了一下。

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方法的參數(shù)是int類型,為什么byte[ ] & 0xFF可以表示int類型呢?

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

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

復(fù)習(xí)一下,原碼反碼補碼這三個概念

對于一個字節(jié)的最高位,計算機中是有規(guī)定的,正數(shù)的最高位為0,負數(shù)的最高位為1。

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

對于負數(shù)(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); }

得到的結(jié)果為:

a[0]:-127

b:129

現(xiàn)在針對這個結(jié)果進行分析:

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

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

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

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

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
麻豆精品久久久| 一区二区国产在线观看| 婷婷综合成人| 日韩中文字幕av电影| 91亚洲精品在看在线观看高清| 欧美aa在线视频| 樱桃成人精品视频在线播放| 久久免费视频66| 亚洲欧美日韩综合国产aⅴ| 精品72久久久久中文字幕| 久久福利精品| 欧洲av不卡| 国产精品第一| 蜜桃视频在线观看一区二区| 欧美亚洲在线日韩| 日韩精品久久久久久久软件91| 亚洲欧洲专区| 久久国产精品99国产| 国产精品免费99久久久| 亚洲v在线看| 国产中文一区| 欧美日韩国产亚洲一区| 精品视频久久| 国产亚洲一区二区三区啪| 欧美精品aa| 成人污污视频| 国内自拍视频一区二区三区| 日韩成人精品一区二区三区| 婷婷成人av| 日韩高清不卡一区| 日本少妇精品亚洲第一区| 中文一区一区三区免费在线观 | 精品在线99| 蜜桃av.网站在线观看| 国产日韩三级| 日韩精品1区| 午夜国产一区二区| 日韩福利视频网| 国产成人调教视频在线观看| 91久久中文| 免费不卡在线视频| 视频国产精品| 日韩成人精品一区| 99久精品视频在线观看视频| 日本午夜精品一区二区三区电影| 久久久久久久久成人| 天堂√中文最新版在线| 91精品在线观看国产| 亚洲影视一区| 久久精品主播| 鲁大师成人一区二区三区| 国产精品探花在线观看| 国产高清不卡| 欧美日一区二区三区在线观看国产免 | 亚洲永久av| 久久成人亚洲| 日韩成人av影视| 久久精品1区| 91精品国产一区二区在线观看| 特黄毛片在线观看| 国产日韩一区二区三区在线播放| 好吊视频一区二区三区四区| 久久久久九九精品影院| 自由日本语亚洲人高潮| 日本亚洲视频| 久久久久国产精品一区二区| 日韩激情网站| 亚洲高清毛片| 日本黄色精品| 欧美日本久久| 日韩三级久久| 亚洲精品99| 国产高清不卡| 国产 日韩 欧美 综合 一区| 日韩高清电影免费| 在线看片一区| 免费的成人av| 日本亚洲欧美天堂免费| 亚洲欧美视频| 久久精品亚洲欧美日韩精品中文字幕| 久久精品国产免费| 欧产日产国产精品视频| 美女网站一区| 亚洲精品看片| 国产日韩视频在线| 国产精品多人| 国产精品99一区二区三区| 福利欧美精品在线| 精品国产一区二| 日韩精品视频一区二区三区| 日本成人在线网站| 日韩高清不卡在线| 国产欧美日韩| 福利一区在线| 久久视频国产| 综合干狼人综合首页| 色综合视频一区二区三区日韩 | 亚洲精品中文字幕乱码| 午夜精品久久久久久久久久蜜桃| 久久中文亚洲字幕| 性欧美精品高清| 国产在视频一区二区三区吞精| 欧美福利一区| 精品一区二区三区中文字幕 | 国产精品99精品一区二区三区∴| 日韩成人一级| 日本午夜精品一区二区三区电影 | 日韩欧美久久| 99久久www免费| 国产日韩专区| 日本中文字幕视频一区| 久久精品系列| 欧美日韩精品免费观看视完整| 超碰在线99| 亚洲综合欧美| 国产精品欧美一区二区三区不卡| 国产精品欧美三级在线观看 | 欧美精品国产白浆久久久久| 欧美国产免费| 精品视频黄色| 国产日韩1区| 亚洲成人精品| 欧美亚洲免费| 天堂网av成人| 精品欠久久久中文字幕加勒比| 国产a久久精品一区二区三区| 国产成人精品免费视| 亚洲天堂1区| 欧美一级一区| 久久免费国产| 亚洲啊v在线| 91九色综合| 欧美特黄a级高清免费大片a级| 久久精品天堂| 日本亚洲不卡| 蜜臀va亚洲va欧美va天堂| 国产精品伊人| 免费看的黄色欧美网站| 卡一精品卡二卡三网站乱码| 日韩一区免费| 国产精品久久久免费| 综合亚洲视频| 欧美日韩激情| 国产黄大片在线观看| 日韩在线黄色| 亚洲激情婷婷| 涩涩涩久久久成人精品| 久久精品导航| 日韩va欧美va亚洲va久久| 午夜视频精品| 日韩国产网站| 精品国产乱码久久久久久樱花| 国产精品一区二区三区av麻| 免费成人性网站| 亚洲色诱最新| 红桃视频国产精品| 免费在线成人| 欧美日韩国产探花| 国产亚洲精品v| 三级欧美韩日大片在线看| 在线手机中文字幕| 国产va在线视频| 中文字幕在线视频网站| 久久亚洲欧洲| 91久久在线| 鲁大师成人一区二区三区| 午夜av成人| 蜜臀久久99精品久久久画质超高清 | 一区二区三区四区在线观看国产日韩 | 午夜在线精品| 一本色道久久精品| 蜜桃久久久久久久| 欧美日韩夜夜| 不卡一二三区| av不卡在线看| 国产亚洲高清一区| 欧美偷窥清纯综合图区| 国产精品蜜芽在线观看| 日韩高清在线不卡| 97精品国产福利一区二区三区| 久久精品123| 亚洲日本在线观看视频| 免费观看在线综合色| 国产精品亚洲产品| 激情久久久久久| 欧美一级二级视频| 亚洲成人二区| 国产精品久久免费视频| 福利片在线一区二区| 日韩在线不卡| 国产videos久久| 亚洲日本久久| 欧美天堂视频| 国产精品一区二区三区四区在线观看 | 亚洲最新无码中文字幕久久| 亚洲一区二区三区高清不卡| 国产亚洲字幕| 欧美特黄一区| 激情视频网站在线播放色| 免费一级欧美在线观看视频|