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

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

想了一晚上沒想出來,求老師解答/(ㄒoㄒ)/~~

http://img1.sycdn.imooc.com//5943f3500001ed5d13660736.jpg請問大家,“慕課”兩個中文字符的每個字節為什么有32位?不是每個字節8位嗎?

正在回答

7 回答

因為你轉換的結果是二進制,你現在可能已經知道了。

1:byte是8字節

2:int是32字節

3:toBinaryString()是將內容轉換成2進制

由于2個字節組成一個漢字,而你又是2進制的,所以最終結果就是:

11111111111111111111111111000100 ? 11111111111111111111111110111101

??

? ? ? ? ? ? ? ? ??

? ? ? ? ?


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

不用 太計較輸出的內容,GBK中一個漢字就是一個字節(8bit),

Integer.toBinaryString(int);函數是將一個integer類型整數,轉換為無符號2進制數。

列子中: 轉成字節為:-60 -67

轉成java最終能顯示出來的位數32高位為0補1(雙字節);

結果為:11111111111111111111111111000100(其中11000100代表-60)? ? 有符號的二進制取補碼的反碼 ????60

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

我認為是因為每個字節占八位 ?這里是16進制的 ?也就是八位十六進制的數 ? 每個十六進制的數轉換為二進制是四位

所以轉換為二進制就是32位了 ? ?

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

看一下你的這個java文件是什么編碼。如果是utf-8的話。漢子占3個字節就是32位

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

慕課這兩個字轉換為字節后是負的,負的byte自動轉換為int是會按符號位擴展,正數的話是0沒什么影響,負數是1,你再按老師說的加個&0xff就會將前面的置0了,就成8位的了。前面那節二進制我現在都很懵逼。

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

? 你的輸出函數里面不一樣 ?System.out.println(Integer.toHexString(b));?

在Java中,如果想要把一個十進制整數轉換為十六進制,可以使用Integer.toHexString(int i)方法

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

關鍵是漢字根本就是不字節啊。。。

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

舉報

0/150
提交
取消

想了一晚上沒想出來,求老師解答/(ㄒoㄒ)/~~

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

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

幫助反饋 APP下載

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

公眾號

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