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

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

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

时间: 2024-08-23 14:22:14

简单理解信息在计算机中的表示的相关文章

架构设计中服务层的简单理解

如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 在ddd设计中我们经常会提到服务层,服务层是什么?职责是什么?有什么好处?. 先看简单的层次图(注:这里并没有考虑其他多余的领域逻辑数据层存储,或者UOW这些细节) 我的理解是服务层是处于我的应用程序业务层和表现层之间的应用程序边界,边界可能是很薄的一层类设计或者是分布式服务网络跃点.它是一个与技术无关的名词.由表现层直接调用,契约,执行命令(修改状态(CUD))或者是查询返回dto(数据迁

对Django框架中Cookie的简单理解

概念的理解:首先Cookie和Session一样,是django中用于视图保持状态的方案之一.为什么要进行视图保留呢,这是因为浏览器在向服务器发出请求时,服务器不会像人一样,有记忆,服务器像鱼一样,在你一次请求结束后她会很快忘掉你的,对她来说你的每一次请求都是新鲜的,这要是爱情就好了哈,可以爱情保鲜!闲话不多说,这种状态就是所谓的 "浏览器请求服务器是无状态",根本原因就复杂一些了,需要简单了解些网络编程中套接字Socket的通信方式,简单来说就是,浏览器和服务器进行通信需要使用Soc

session的官方定义是:Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。 说白了session就是一种可以维持服务器端的数据存储技术。session主要有以下的这些特点: 1. session保存的位置是在服务器端 2. session一般来说是要配合cookie使用,如果是浏览器禁用了cookie功

session的官方定义是:Session:在计算机中,尤其是在网络应用中,称为"会话控制".Session 对象存储特定用户会话所需的属性及配置信息. 说白了session就是一种可以维持服务器端的数据存储技术.session主要有以下的这些特点: 1. session保存的位置是在服务器端 2. session一般来说是要配合cookie使用,如果是浏览器禁用了cookie功能,也就只能够使用URL重写来实现session存储的功能 3. 单纯的使用session来维持用户状态的话

计算机中信息表示

1.概述 现在的我们无时无刻不在接触计算机,即常说的电脑.计算机能干很多事,比如浏览网页.看视频.玩游戏.办公等,实现这些功能都需要计算机有信息存储和处理的能力.现代计算机的信息存储和处理都以二进制为基础,简单来说我们在电脑上看到的信息(比如文字.图片.音频.视频)都是以二进制表示的形式存储在计算机上或被计算机以二进制这种形式处理的.比如我们在计算机上的记事本中写日记,写入的是中文,在计算机中是以二进制编码(01010......)存储的,同时会给这些二进制编码指定一种解释方式,比如GB2312

JAVA 读取计算机中相关信息

java读取 计算机 cup号 读取版本 显卡 ................. package com.swt.common.util; import java.io.BufferedReader; import java.io.File; import java.io.FileWriter; import java.io.InputStreamReader; import java.io.LineNumberReader; /** * 获取硬件信息 * @author luoxf * */

c语言中对可变参数列表的简单理解

函数原型中一般情况下参数的数目是固定的,但是如果想在不同的时候接收不定数目的参数时该怎么办呢?c语言提供了可变参数列表来实现. 可变参数列表是通过宏来实现的,这些宏定义在stdarg.h的头文件中.头文件中声明了一个va_list类型和va_start.va_arg.va_end三个宏.我们使用可变参数列表的时候需要声明一个va_list类型的变量配合这三个宏使用. va_start(va_list变量名,省略号前面最后一个有名字的参数):在提取可变参数前必须调用这个宏实现初始化. va_arg

计算机中的信息=位+上下文(转)

计算机中的信息=位+上下文.进一步,信息可以分为两大类:一类是数据,一类是指令.指令用来表明操作的动作,数据用来表明被操作的对象,这两者同时也构成了一个完整的程序. 对于数据而言,我们先来谈整数的表示和运算.无符号编码表示无符号数,补码表示有符号数,相信大家对这两种编码应该是非常熟悉的(无符号编码没有符号位,补码的最高位表示符号位). 在整数的运算方面一共有两种,一种是算术运算,一种是逻辑运算.算术运算就指平常的加减乘数,当然要注意溢出.符号位等各种情况(这个讲起来的话太多了,而且我也担心自己讲

玩转web之servlet(六)---session介绍及简单使用(登录验证中保存信息)

在浏览器与服务器进行交互时,往往需要把涉及到的一些数据保存下来,这时就需要使用cookie或session进行状态管理. 这篇文章先来说说session怎么用,首先在servlet中创建一个session来保存信息,举个例子,在做登陆验证时,如果登陆成功,需要将用户的信息保存到session中,怎么保存呢?下面给出代码: public class Login_Do extends HttpServlet { String order_name = ""; String order_pa

在计算机中简单的hello程序的运行

我之前很好奇就是你所写的代码到底是如何在计算机中执行的,到底是怎样开始,从哪里开始,在哪里执行,到哪里结束,之间到底是怎么的一个过程,带着这些问题,逐渐看这方面的书籍,最近买的<深入理解计算机系统>这本书,刚开始看,把一些东西记录一下.这本书中主要是以C语言为基础进行讨论的.下面说一下在计算机中,hello world /n 是如何运行输出的. 1.初始 初始时,shell 命令执行它的指令,等待我们输入一个命令.当我们在键盘上输入字符串"./hello"后,shell 程