信息是一个很宽泛的概念,说大了是与物质和能量鼎立的自然界三要素,这里仅仅涉及到计算机中的信息;
众所周知,对计算机自身而言,所有信息都是0/1二进制形式;
作为JavaEE/Android程序员,在开发过程中有时会遇到字符编码,进制转换这样的基础问题,虽然依靠经验或者网络搜索能很快实现功能,但每次都感觉对基本概念理解得不是很透彻,不如把现有的理解记录下来,以备后用;
信息在计算机中大致分为控制信息和数据信息;
控制信息是计算机系统内部运转用到的控制命令,例如读写命令,中断信号,片选信号,复位信号,就绪信号等;当然都是二进制表示;
数据信息指计算机可运算、可存储、可传输、可采集、可输出的各种数据;可分为数值数据,文本数据(字符,字串),多媒体数据(图像,音频,视频),二进制数据(可执行文件等);
计算机信息的表示跟信息的处理,传输,存储,输入/输出一样,是计算机系统最基本的功能之一;
计算机中的信息表示可分为硬件系统可直接表示的信息,和软件系统可表示的信息;后者如数据结构,数据库表结构,XML/Json结构等等;
这里,只讨论计算机硬件系统对信息的表示;
位,Bit,Binary digit的缩写,是计算机中信息表示的最小单位;跟电子计算机的“电子”有关,高低电平;
字节,Byte, 8Bit, 可表示一个英文字符ASCII码;跟计算机的发明国美利坚所用语言有关;
定点数,小数点位置固定不变;定点小数的小数点紧跟符号位之后;定点整数小数点在有效数值部分之后;
浮点数,小数点位置可以浮动;尾数,阶码,底数;尾数位数越多,所表示数值的密度越大,精度越高;阶码位数越多,所表示数值的范围越大;
无符号数,全部二进制位均表示数值位;
有符号数,最高位被用来表示符号位;
机器数,一个数的二进制表示形式,最高位表示符号;
真值,机器数代表的真正数值;
原码,符号位加上真值的绝对值;
反码,正数的反码与其原码相同,负数的反码是对其原码逐位取反,符号位除外;
补码,正数的补码与其原码相同,负数的补码是在其反码的末位加1;
在计算机中,数值一律采用补码表示;
补码设计目的:
-使符号位能与有效值部分一起参加运算(自动溢出),简化运算规则;
-使减法运算转换为加法运算(同余,模数,A-B 等于 A+B的补码),简化计算机中运算器的线路设计;
溢出,计算得出的数值超出了整数类型可以表示的数值范围;
进制,进制主要包含基数和位权两个因素;计算机常用的是二进制,八进制,十六进制;
N进制转换成十进制,按权求和;
十进制转换N进制,整数部分-除N取余,小数部分-乘N取整;
一般可借助二进制或十进制做中间转换;
具体的转换原理和算法及程序实现在另外的文章再做介绍;
(todo 补码运算和浮点数运算)
字符编码和字符集:
ASCII-American Standard Code for Information Interchange. 1bit+7bit; 英文字符编码,老美出品,第一个bit为0,可表示128个字符;扩展集第一个bit为1,加起来
表示256个字符;
这对于非英语国家特别是亚洲国家的文字表示是远远不够啊,于是各国开始扩展自己的字符集;各自扩展的结果就是互不兼容;同一个二进制串在不同语言国家表示不同字符;
于是出现了伟大的万国码Unicode,可统一表示世界上所有国家的文字; Unicode仅仅给出了字符的编码值,这些值在计算机中具体怎么表示是由UTF来实现的;
具体有:UTF-8/UTF-16/UTF-32;
UTF-8用可变长度(1-6)字节表示Unicode值,UTF-16用2字节或4字节表示Unicode值;UTF-32用4字节表示Unicode值;
既然是可变多字节表示,为了避免歧义,就要指明字节的长度和顺序(BOM);
UTF-8 encoding scheme:
for 1 byte unicode character: the first bit is 0, the rest 7 bits are the unicode value of the character;
for n byte unicode character: the first n bits of the first byte are 1, and the n+1 bit is 0, the first 2 bits of the rest bytes are 10, and all the rest bits are the
unicode value of the character;
Unicode符号范围 | UTF-8编码方式
(十六进制) |(二进制)
------------------------------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
其它字符编码还有:
UCS-Universal Character Set: UCS-2(16bit), UCS-4(32bit),
EBCDIC-Extended Binary Coded Decimal Interchange Code:8bit.
ISO 8859: 8bit,
GB2312:16bit, 94区*94位, 简体中文.
BIG5: 16bit, 繁体中文.
关于big-endian(FEFF)和little-endian(FFFE):
big-endian: the higher(most significant) byte stored in the lower memory address.
little-endian: the lower(least signaficant) byte stored in the lower memory address.
BOM-Byte Order Mark,ZERO WIDTH NO-BREAK APACE,FFFE,
(todo 多媒体信息表示,图形,图像,动画,音频,视频,虚拟现实)