亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

0xff有關的與運算

byte型數據(比如-14)和0xff進行與運算,會改變它的正負號嗎?

正在回答

2 回答

byte---字節類型,即一個字節,占8位,最高位為符號位,“0”表示正,“1”表示負,其余位表示數值的大小。

Java中用補碼表示二進制數,補碼的最高位是符號位,最高位為“0”表示正數,最高位為“1”表示負數。

正數補碼為其本身;
負數補碼為其絕對值各位取反加1;

(-14),按照概念其絕對值為0000 1110,各位取反為1111 0001,再加1為1111 0010,即(-14)的二進制表示形式為11110010。

1111 0010 & 0xff,與運算后結果為1111 0010,結果還是(-14),所以不改變其正負號。

????


0 回復 有任何疑惑可以回復我~

好像不對啊,我測試了一下,申明一個byte類型的數-14,輸出它與0xff與運算的結果,不是-14,而是242

0 回復 有任何疑惑可以回復我~
#1

袁初

打印輸出為242,我覺得你可能使用下面的輸出語句: System.out.println(a & 0xff);//結果為242 System.out.println(Integer.parseInt("11110010", 2));//結果為242 System.out.println(Integer.valueOf("11110010",2));//結果為242
2017-04-28 回復 有任何疑惑可以回復我~
#2

袁初

如果是這樣,我覺得不妥,因為Java中是用補碼表示二進制數,所以(-14)&0xff得到的結果(1111 0010)是二進制的補碼,而不是(-14)的二進制表示形式,如果直接輸出得到的僅是二進制(1111 0010)轉化為十進制后的數,即242,轉化時忽略了最高是符號位; 從另一種角度理解:這里涉及的0xff與操作,僅僅是為了簡化IO流的輸出顯示,而不應該改變原來的文件內容。
2017-04-28 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
文件傳輸基礎——Java IO流
  • 參與學習       133821    人
  • 解答問題       1060    個

為您介紹IO流的使用,以及對象的序列化和反序列化的內容

進入課程

0xff有關的與運算

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號