知方号

知方号

为什么在java中文转bytes是负数<字符串包含汉字吗为什么>

为什么在java中文转bytes是负数

import java.util.Arrays;public class Test { public static void main(String[] args) { // 将中字转换成byte数组 byte[] bytes = "中".getBytes(); System.out.println(Arrays.toString(bytes)); // 输出[-28, -72, -83] }}

 

为什么中文的中转换成byte类型后 就变成了[-28, -72, -83]

原理如下

在utf-8编码中, 一个中文字符占用3个字节. 在GBK编码中, 一个中文字符占用2个字节.

我们在这个网站查询中字的utf-8编码16进制是 E4B8AD 对应的二进制是‭11100100 10111000 10101101‬

假定二进制是带符号位的, 我们需要给它们转换成十进制, 步骤如下

第一步: 去掉补码 (也就是二进制值减1) 进制字节1字节2字节3十六进制E4B8AD二进制1110 01001011 10001010 1101去掉补码1110 00111011 01111010 1100 第二步: 将补码转换成反码(1变0, 0变1) 进制字节1字节2字节3十六进制E4B8AD二进制1110 01001011 10001010 1101去掉补码1110 00111011 01111010 1100反码0001 11000100 10000101 0011 第三步: 将反码转换成十进制 进制字节1字节2字节3十六进制E4B8AD二进制1110 01001011 10001010 1101去掉补码1110 00111011 01111010 1100反码0001 11000100 10000101 0011十进制287283 第四步: 带上符号位(负号) 结果: -28 -72 -83

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。