简单理解信息在计算机中的表示

时间:2022-09-14 19:23:49

信息是一个很宽泛的概念,说大了是与物质和能量鼎立的自然界三要素,这里仅仅涉及到计算机中的信息;

众所周知,对计算机自身而言,所有信息都是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 多媒体信息表示,图形,图像,动画,音频,视频,虚拟现实)