字符编码总结
1.注意位与字节的区别
位是计算机存储的最小单位,外文名称是bit,音译比特,1bit;
字节是计算机存储的第二小单位,英文名称是byte;
字节与位的换算方式:1byte = 8bits,即一字节等于8比特。在计算机中一般int类型有4个字节,所以Int类型有32位(对于有符号类型最高位表示符号位0表示正数1表示负数,表示范围是-2^31^ 至2^31^-1,对于无符号unsigned int表示范围为0至2^32^-1)。
对于int类型有符号的,0000 0000 0000 0000 0000 0000 0000 0000注意位数是从0位开始的,int类型最大可以表示的正整数是2^31^-1;下面看一下负数的表示,==值得注意的是数据在计算机中是用补码形式存储的(正数的原码和补码一样,负数的补码是反码求反加一并且符号位不能变,反码是数据位求反符号位不变)==;那么,我们这样来算
原码:1111 1111 1111 1111 1111 1111 1111 1111(-2^31^ +1 = -2147483647)==这难道就是最小负数???==肯定不是的,我们注意到:
+0的原码:0000 0000 0000 0000 0000 0000 0000 0000
-0的原码:1000 0000 0000 0000 0000 0000 0000 0000
为了节约存储,我们把-0最为int类型最小负数,即-2^31^ = -2147483648。所以对于int类型最大为2^31^-1 = 2147483647,最小为-2^31^ = -2147483648。对于无符号型int来说最大为2^32^-1,最小为0
2.了解ASCLL编码、GB2312编码(中文)、unicode编码和UTF-8编码
- ==ASCLL编码:==由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,比如大写字母A的编码是65,小写字母z的编码是122。
- ==GB2312编码(中文):==处理中文一个字节是不够的(2^8^-1=255),至少要两个字节(2^16^-1 = 65535个汉字差不多)。
- ==unicode编码:==Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
- ==UTF-8编码:==UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。