Java基础笔记(六)——进制表示、ASCII码和Unicode编码

Java中有三种表示整数的方法:十进制、八进制、十六进制。

八进制:以0开头,包括0~7的数字。如:int octal=020;  //定义int型变量存放八进制数据

十六进制:以0x或0X开头,包括0~9的数字及字母a~f,A~F。如:long hex=0xf932d763fae4325L;  //定义长整型变量存放十六进制数据

不同的编码方式按照它们的规定方法将支持的字符集转换为计算机硬件进行能操作的二进制形式,其中包括了一些格式转换过程。

ASCII(American Standard Code for Information Interchange美国标准信息交换代码),基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其它西欧语言。不支持包括中文在内的所有语言。数字的ASCII码<大写字母的ASCII码<小写字母的ASCII码。

1.使用7位或8位二进制数组合来表示128或256种可能的字符。(如:A对应的ASCII码二进制:01000001,十进制是65。)7位表示成8位,在最高位填0就行。

2.标准ASCII码使用7位二进制来表示所有的大写字母和小写字母,数字0~9,标点符号,以及在美式英语中使用的控制字符。

3.后128个称为扩展ASCII码,用于表示特殊符号、外来语字母和图形符号。

所以说,ASCII码支持一个字符占一个字节(8bit)。

像char类型在进行运算时输出的结果,是把字符转换为对应的ASCII码,我们通常看到的结果是ASCII的二进制转换为十进制的数字,当然,这些字符也可以对应八进制或十六进制。

ASCII算上扩展的,共256种1和0的组合来表示256个字符,不包括中文。中国制定了GB2312编码,把中文编进去,包括汉字、其它字母以及图形符号等,GBK字符集是GB2312的扩展,主语扩展了繁体中文字的支持。类似地,日文和韩文等其它语言也有这个问题。不同的国家会制定支持各自语言的编码方式,为了统一所有文字的编码,Unicode应运而生。扩充这么多字符,一个字节(8bit)肯定是不够了,Unicode、GB2312和GBK编码都是用两个字节表示一个字符,之前的英文编码从单字节变成双字节,只需要把高字节全部填0就行,也就是用16种1和0的组合(256 x 256 = 65536 个符号),前面的已编好的字符前8位都填0即可。

Unicode编码又称为统一码或万国码,是计算机科学领域的一项业界标准,目标是支持世界上所有的字符集,即世界上的各种语言字符都有对应的Unicode编码,这样就不会有乱码问题。英文每个字符占用一个字节,中文每个字符占用两个字节。

Unicode表示法:在值前加 u来表示Unicode编码,后面跟四位十六进制数。即范围从u0000~uffff

如:char c='u005d';   //char型是用单引号括,这里表示的是Unicode编码,代表一个字符']'

UTF-8(8-bit Unicode Transformation Format)是Unicode的其中一个使用方式,用在网页上可以统一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。UTF-8使用可变长度字节来储存 Unicode字符,它可以使用 1 - 4 个字节表示一个字符,根据字符的不同变换长度,这样可以减少所需的存储空间,提高存储效率utf-8编码一个中文字符占三个字节。

char类型占2个字节,16位可以存放一个汉字。

原文地址:https://www.cnblogs.com/tendo/p/10328206.html