编码问题小记

计算机的基本存储单元为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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值