Java 基础(ASCII 码,Unicode 编码,UTF-8, 二进制)

ASCCII 码

在计算机内部,所有数据都使用二进制表示。每一个二进制位(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

      计算机底层都以补码的方式来存储数据!
原文地址:https://www.cnblogs.com/klvchen/p/14158908.html