`

字符编码表-字符串-字符-字节-字节数组理解

    博客分类:
  • java
阅读更多

 

 

字符串是由一个一个的字符组成

每个字符按照编码表有一个对应的数字(编码表的作用)

编码查询:http://www.mytju.com/classcode/tools/encode_utf8.asp

每个字符直接赋值给整数则可以得到对应字符编码表中的数值

 

 

编码表:字符和数字之间的对应关系表

java中字符类型和整数类型可以互相转化

字符型常量以Unicode(ascii)编码形式存储,占用2个字节,

当字符赋值给整数,则在编码表中查到相应的数值赋值(对应关系)

当整数赋值给字符,则在编码表中查到相应的字符赋值

 

 

utf-8编码变长编码,1-4个字节表示一个字符,对单字节范围内字符仍然用一个字节表示,对汉字采用三个字节表示。

 

 

对于任何一个字符串-每个字符在字符编码表中对应一个十六进制数值 

 

“君”的unicode编码十六进制表示形式541b转换为二进制为 101010000011011一共8位,

按照utf-8的规则变成3个字节表示一个中文,则二进制表示为11000101  10010000 10011011,比unicode多出来的都是按照utf-8规则多出来的规则位置,

  转换为十六进制的变为:c5909b ,则放到字节数组中就变成3个字节的c5909b。

二进制对比:

utf-8:  11000101  10010000 10011011  -- c5909b

unicode:     101    010000   011011  -- 541b

 

参考:

 http://www.mytju.com/classcode/tools/encode_utf8.asp

 https://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/index.html

 

 十进制、原码、反码、补码工具:http://www.atoolbox.net/Tool.php?Id=952

 

 

补码个人理解:
1、计算机只认识0、1即二进制
2、计算机没有减法(需要把减法转换成加法),即补码作用就是减法转加法(本质负数的源码和补码相加=对应位数最大值,需要去掉符号为计算)
3、如:对于八位二进制,第一位为符号为,那最大值为(1111111,七个1,第一位是符号位)
11101101(去掉第一位符号位:109 ),对应补码10010010(去掉第一位符号位数值为:18) ,两者和是127(11111111、八个1)
即:11101101 + 10010010 = 去掉符号位结果为1111111 七个1

个人理解负数补码为-对于8位二进制负数:
10010010   18
11101101  109
两者相加为 8个1

 

 

字符和编码转换实例:

 

        String str = "ab君" ;

        for(int i=0;i<str.length();i++ ){
            //字符
            char c = str.charAt(i);
            System.out.println( c );
            //字符 对应编码 的数值
            int k = c;
            System.out.println( k );
        }


        String ca = "君";
        char[] c = ca.toCharArray();
        char ca = 97;
        System.out.println( ca );

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics