亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java輸出通過InetAddress獲得的IP地址數(shù)組詳細(xì)解析

 更新時(shí)間:2013年09月16日 08:44:15   作者:  
由于byte被認(rèn)為是unsigned byte,所以最高位的1將會(huì)被解釋為符號(hào)位,另外Java中存儲(chǔ)是按照補(bǔ)碼存儲(chǔ),所以1000 0111會(huì)被認(rèn)為是補(bǔ)碼形式,轉(zhuǎn)換成原碼便是1111 0001,轉(zhuǎn)換成十進(jìn)制數(shù)便是-121

使用 InetAddress 獲取 IP 地址會(huì)得到一個(gè) byte 數(shù)組
如果你直接輸出這個(gè)數(shù)組,你會(huì)發(fā)現(xiàn) IP 地址中的某些位變成了負(fù)數(shù)
比如 61.135.169.105 會(huì)輸出成 61.-121.-87.105
仔細(xì)看一看,會(huì)發(fā)現(xiàn) 135 + 121 = 256,169 + 87 = 256

-_-! 怎么個(gè)情況!

我首先想到的是 byte 類型向 int 類型轉(zhuǎn)換過程中出現(xiàn)了問題,后來發(fā)現(xiàn),實(shí)際不然

因?yàn)?Java 中沒有 unsigned 類型,所以byte、short、int、long 都是有符號(hào)的,所以根本就不存在隱式類型轉(zhuǎn)換出錯(cuò)的問題。

既然說到了 Java 沒有 unsigned 類型,那么 byte 是 8 位,所以表示范圍為 -127 - 128,而 IP 一個(gè)段的表示范圍為 0 - 255,終于找到了不對(duì)勁的地方了

IP 的一個(gè)段是一個(gè) unsigned byte,這樣一個(gè) unsigned byte 存入一個(gè) signed byte 中當(dāng)然會(huì)導(dǎo)致一些問題出現(xiàn)

分析一下:
35 的二進(jìn)制編碼為 1000 0111,最高位置為 1

由于 byte 被認(rèn)為是 unsigned byte,所以最高位的 1 將會(huì)被解釋為符號(hào)位,另外 Java 中存儲(chǔ)是按照補(bǔ)碼存儲(chǔ),所以 1000 0111 會(huì)被認(rèn)為是補(bǔ)碼形式,轉(zhuǎn)換成原碼便是 1111 0001,轉(zhuǎn)換成十進(jìn)制數(shù)便是 -121。

再看,65 的二進(jìn)制編碼為 0100 0001,由于小于 128,所以沒有將最高位置 1,0100 0001 的補(bǔ)碼還是 0100 0001,所以 65 不變。

分析這么多,這個(gè)問題的解決方法其實(shí)很簡(jiǎn)單,將 byte 變量與 0xFF 按位與即可,過程中 byte 會(huì)隱式類型轉(zhuǎn)換為 int,當(dāng)與 0xFF 按位與的時(shí)候,會(huì)將除了低 8 位的其他位全部置 0,這樣一來便將符號(hào)擴(kuò)展的那些高位清除掉了。

最后附上一個(gè)自己寫的通用函數(shù),用來將整型變量的二進(jìn)制編碼輸出

復(fù)制代碼 代碼如下:

/**
 * 將整型變量的二進(jìn)制編碼形式輸出
 * @param n 整型變量
 * @param size 整型的二進(jìn)制長(zhǎng)度,可使用類似 Short.SIZE 獲得
 * @return 二進(jìn)制編碼字符串
 */
public static String printBinary(long n, int size) {
 StringBuilder sb = new StringBuilder();
 for (int i = size - 1; i >= 0; i--) {
  sb.append(n >>> i & 0x01);
  if (i % 4 == 0) {
   sb.append(" ");
  }
 }
 return sb.toString();
}

相關(guān)文章

  • scala當(dāng)中的文件操作和網(wǎng)絡(luò)請(qǐng)求的實(shí)現(xiàn)方法

    scala當(dāng)中的文件操作和網(wǎng)絡(luò)請(qǐng)求的實(shí)現(xiàn)方法

    這篇文章主要介紹了scala當(dāng)中的文件操作和網(wǎng)絡(luò)請(qǐng)求的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Java?Kryo,Protostuff,Hessian序列化方式對(duì)比

    Java?Kryo,Protostuff,Hessian序列化方式對(duì)比

    這篇文章主要介紹了Java?Kryo,Protostuff,Hessian序列化方式對(duì)比,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • JavaWeb文件上傳下載實(shí)例講解(酷炫的文件上傳技術(shù))

    JavaWeb文件上傳下載實(shí)例講解(酷炫的文件上傳技術(shù))

    在Web應(yīng)用系統(tǒng)開發(fā)中,文件上傳功能是非常常用的功能,今天來主要講講JavaWeb中的文件上傳功能的相關(guān)技術(shù)實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-11-11
  • 在spring boot中使用java線程池ExecutorService的講解

    在spring boot中使用java線程池ExecutorService的講解

    今天小編就為大家分享一篇關(guān)于在spring boot中使用java線程池ExecutorService的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • java代碼之謎運(yùn)算符篇

    java代碼之謎運(yùn)算符篇

    從最簡(jiǎn)單的運(yùn)算符加號(hào)(+)說起,加號(hào)(+)是個(gè)二元運(yùn)算符——也就是說,加號(hào)只把兩個(gè)數(shù)聯(lián)接起來,從來不把第三個(gè)或者更多的聯(lián)接起來
    2012-11-11
  • java自動(dòng)裝箱拆箱深入剖析

    java自動(dòng)裝箱拆箱深入剖析

    基本數(shù)據(jù)(Primitive)類型的自動(dòng)裝箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0開始提供的功能。java語言規(guī)范中說道:在許多情況下包裝與解包裝是由編譯器自行完成的(在這種情況下包裝成為裝箱,解包裝稱為拆箱)
    2012-11-11
  • jmeter設(shè)置全局變量與正則表達(dá)式提取器過程圖解

    jmeter設(shè)置全局變量與正則表達(dá)式提取器過程圖解

    這篇文章主要介紹了jmeter設(shè)置全局變量與正則表達(dá)式提取器過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java9新特性Stream流API優(yōu)化與增強(qiáng)

    Java9新特性Stream流API優(yōu)化與增強(qiáng)

    這篇文章主要為大家介紹了Java9新特性Stream流API優(yōu)化與增強(qiáng)的用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • Java中==運(yùn)算符與equals方法的區(qū)別及intern方法詳解

    Java中==運(yùn)算符與equals方法的區(qū)別及intern方法詳解

    這篇文章主要介紹了Java中==運(yùn)算符與equals方法的區(qū)別及intern方法詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • java短信驗(yàn)證碼獲取次數(shù)限制實(shí)例

    java短信驗(yàn)證碼獲取次數(shù)限制實(shí)例

    這篇文章主要介紹了java短信驗(yàn)證碼獲取次數(shù)限制實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01

最新評(píng)論