在计算机内部,所有数据都使⽤⼆进制表⽰。每⼀个⼆进制位(bit)有0和1两种状态,因此8个⼆进制位就可以组合出256种状态,这被称为⼀个字节(byte)。⼀个字节⼀共可以⽤来表⽰256种不同的状态,每⼀个状态对应⼀个符号,就是256个符号,从0000000到11111111。缺点:
不能表⽰所有字符。
相同的编码表⽰的字符不⼀样:⽐如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel
Unicode 编码
Unicode 编码,将世界上所有的符号都纳⼊其中。每⼀个符号都给予⼀个独⼀⽆⼆的编码,使⽤ Unicode 没有乱码的问题。
缺点: Unicode 只规定了符号的⼆进制代码,却没有规定这个⼆进制代码应该如何存储:⽆法区别 Unicode 和 ASCIl;计算机⽆法区分三个字节表⽰⼀个符号还是分别表⽰三个符号。另外,我们知道,英⽂字母只⽤⼀个字节表⽰就够了,如果 unicode 统⼀规定,每个符号⽤三个或四个字节表⽰,那么每个英⽂字母前都必然有⼆到三个字节是0,这对于存储空间来说是极⼤的浪费。
UTF-8
UTF-8 是在互联⽹上使⽤最⼴的⼀种 Unicode 的实现⽅式。
UTF-8 是⼀种变长的编码⽅式。它可以使⽤ 1-6 个字节表⽰⼀个符号,根据不同的符号⽽变化字节长度。UTF-8 的编码规则:
1. 对于单字节的 UTF-8 编码,该字节的最⾼位为0,其余7位⽤来对字符进⾏编码《等同于ASClI码》。
2. 对于多字节的 UTF-8 编码,如果编码包含n个字节,那么第⼀个字节的前n位为1,第⼀个字节的第 n+1位为0,该字节的剩余各位⽤来对字符进⾏编码。在第⼀个字节之后的所有的字节,都是最⾼两位为\"10”\",其余6位⽤来对字符进⾏编码。
class CharacterDemo{
public static void main(String[] args){
// 要在 Windows 操作系统上显⽰中⽂,必须以 ANSI 编码(即GBK 编码)保存 System.out.println(\"Hello World! 你好, 中国!\"); }}
⼆进制
Java整数常量默认是 int 类型,当⽤⼆进制定义整数时,其第32位是符号位; 当是 long 类型时,⼆进制默认占64位,第64位是符号位⼆进制的整数有如下三种形式:
1. 原码:直接将⼀个数值换成⼆进制数。最⾼位是符号位
2. 负数的反码:是对原码按位取反,只是最⾼位(符号位)确定为1。3. 负数的补码:其反码加1。计算机以⼆进制补码的形式保存
1. 正数的原码,反码,补码都相同2. 负数的补码是其反码+1
计算机底层都以补码的⽅式来存储数据!
因篇幅问题不能全部显示,请点此查看更多更全内容