關于String轉化為byte數組后,不進行&0xff,打印出的結果,上圖,為什么是這樣,漢字的一個字節前面為什么有那么多的1
11111111111111111111111111000100 ?
11111111111111111111111110111101 ? ?前兩行為“幕”
11111111111111111111111110111111?
11111111111111111111111111001110 ??前兩行為“課”
1000001 ?“A"
1000010 ? "B"
1000011 ?"c"
2015-08-23
你這樣可不好哦。這種情況我們可以查看 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類型為負的問題。
這些也是我看到你的問題后才去查閱資料了解的,我還是希望大家學習編程過程中多一些磨礱淬礪,少一點不求甚解。對原理的掌握多少,覺頂你以后的高度。
2015-12-16
學習了
2015-08-21
我知道了,byte為8位,int為32位,將byte轉化為int,也就是相當于將byte再增加24位,這24位默認為零,漢字對應的因為反碼或者什么原因,前面添加的是1,