计算机的基本存储单元为byte,表示1个字节(8bit),但是人类需要的符号太多,用1个字节表示是远远不够的,于是有了新的数据结构char。从char到byte需要编码。那么常见的acsii,Unicode、utf8等便是编码规则,按照这个规则将字符翻译成计算机理解的语言。
1、数字转成字符的对应关系?
输入的数字为unicode十进制数字,转为相对应的字符
2、string与char的关系
string本质是char数组,汉字后面的数字为Unicode十进制编码值
3、string与byte之间的转换
public static void main(String[] args) throws UnsupportedEncodingException {
String aa = "你好,123abc";
byte[] bb = aa.getBytes("utf-8");
StringBuilder sb = new StringBuilder();
for(int i = 0; i<bb.length; i++){
sb.append(bb[i]).append(",");
}
System.out.println(sb);
}
sb = -28,-67,-96,-27,-91,-67,-17,-68,-116,49,50,51,97,98,99
以汉字”你“为例,“你”的unicode编码(十进制)为20320,转为二进制为:100111101100000,UTF-8编码需要3个字节表示,11100100 10111101 10100000
从末位依次填充,高位补0。
计算机中是以补码的形式存储,3个字节的补码(符号位不变,其余位取反,结果+1得到补码)依次为-28,-67,-96
补充:
(1)已知补码求真值:补码最高位为0则直接计算得到真值;补码最高位为1则补码按位取反,结果+1,得到真值的绝对值,添加负号
例:11100100-->00011011(最高位为1则补码按位取反)-->00011100(结果+1,得到真值绝对值28)-->-28
(2)已知真值求补码:真值为正,补码即为原码;真值为负,绝对值的原码,全部取反,再加1,得到补码
例:-28 --> 00011100(绝对值的原码)-->11100011(全部取反)-->11100100(+1得到补码 e4)