为何str.getBytes("gbk")拿到的不是正确的gbk编码

为什么str.getBytes(gbk)拿到的不是正确的gbk编码?秋字, 使用工具查询的GBK编码是 C7 EF。C7 EF转换成1

为什么str.getBytes("gbk")拿到的不是正确的gbk编码?
"秋"字, 使用工具查询的GBK编码是 C7 EF。
C7 EF转换成10进制数是 199 239

Java code
String s = "秋";byte[] b = s.getBytes("gbk");for(int i=0; i<b.length; i++){    System.out.println(b[i]);}


结果输出的不是 199 239 而是 -57 -17
请问这是怎么回事?中间到底发生了什么?为什么结果不正确?

[解决办法]
byte 最大值127 所以是-的
[解决办法]
c7转为二进制:1100 0111,你输出的时候,系统会把这个看为一个整数,最高位为1,那就是一个负数。

1100 0111是补码,转为反码1100 0110,再转为原码1011 1001=-(1+8+16+32)=-57
[解决办法]
Java code
String s = "秋";        byte[] b = s.getBytes("gbk");        for (int i = 0; i < b.length; i++) {            System.out.println(Integer.toHexString(b[i]&0xFF));            System.out.println(Integer.toBinaryString(b[i]&0xFF));        }输出:c711000111 //-57的二进制补码ef11101111