32 位 JDK,GBK 編碼中文「張」佔 2 字節,但打印每字節顯示 32 位(高位全 1)。
代碼中將 byte 強轉或賦值給 int 變量打印:
System.out.println((int)byteVal);
int 佔 4 字節 = 32 位,符號位擴展導致高位全 1(負數 byte 符號擴展)。
byte[] gbk = "张".getBytes("GBK"); // 長度 2
for (byte b : gbk) {
System.out.println(Integer.toBinaryString(b & 0xFF)); // 掩碼取低 8 位
// 輸出 8 位二進制,無高位 1
}
byte 為有符號 8 位,打印時轉 int 發生符號擴展。b & 0xFF 取無符號值。