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

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

關于String轉化為byte數組后,不進行&0xff,打印出的結果,上圖,為什么是這樣,漢字的一個字節前面為什么有那么多的1

11111111111111111111111111000100 ?

11111111111111111111111110111101 ? ?前兩行為“幕”

11111111111111111111111110111111?

11111111111111111111111111001110 ??前兩行為“課”

1000001 ?“A"

1000010 ? "B"

1000011 ?"c"


正在回答

3 回答

你這樣可不好哦。這種情況我們可以查看 Integer.toHexString(int i); 的API文檔:

“The unsigned integer value is the argument plus?2^32 if the argument is negative; otherwise, it is equal to the argument.”

文檔說如果參數為負,那么無符號的整數值為參數加上 2^32作為參數;否則等于該參數。

那就簡單了,因為這個的“慕”“課”2個字的GBK編碼為 11000100(C4BD)、10111101(BFCE)(http://www.mytju.com/classCode/tools/encode_gb2312.asp查詢),其作為 int 類型參數時為負數,所以實際參數為00111100+2^32、01000011+2^32 剛好就是 11111111111111111111111111000100? 和? 11111111111111111111111110111101。而幾乎所有的編碼格式中的字母都是傳承的ASCII中的編碼,即a~z:61~7A、A~Z:41~5A,不存在轉 int類型為負的問題。

這些也是我看到你的問題后才去查閱資料了解的,我還是希望大家學習編程過程中多一些磨礱淬礪,少一點不求甚解。對原理的掌握多少,覺頂你以后的高度。

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

武當王也 提問者

非常感謝!
2015-08-27 回復 有任何疑惑可以回復我~
#2

詹士

你好,2^32是指把2和32分別變成2進制之后進行異或運算么?然后再把結果加上那兩個字的二進制編碼形式的值么? 再然后,你說“而幾乎所有的編碼格式中的字母都是傳承的ASCII中的編碼,即a~z:61~7A、A~Z:41~5A,不存在轉 int類型為負的問題。”,為什么傳承ASCII中的編碼就不存在轉INT為負的問題? 如果你沒時間解釋,我需要看什么書補充哪方面的知識來了解?
2015-09-23 回復 有任何疑惑可以回復我~
#3

資深老饕 回復 詹士

C4BD、BFCE的2進制表示為1100010010111101、 1011111111001110。2^32=2的32次方. 居然限制字數--,算了,你搜索一下補碼個GBK編碼。不懂再聯系我郵箱[email protected],我已經不在imooc學習了。書的話,不管你干什么,只要你還編程,而且還不是計算機相關專業的學生的話,這些書早晚得看:操作系統,數據結構、算法分析、微機原理??梢噪S便看看了解以下,具體的會和以后的學習工作相互促進。
2015-09-30 回復 有任何疑惑可以回復我~
#4

詹士 回復 資深老饕

謝謝!
2015-10-01 回復 有任何疑惑可以回復我~
查看1條回復

學習了

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

我知道了,byte為8位,int為32位,將byte轉化為int,也就是相當于將byte再增加24位,這24位默認為零,漢字對應的因為反碼或者什么原因,前面添加的是1,

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

舉報

0/150
提交
取消

關于String轉化為byte數組后,不進行&0xff,打印出的結果,上圖,為什么是這樣,漢字的一個字節前面為什么有那么多的1

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

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

幫助反饋 APP下載

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

公眾號

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