码迷,mamicode.com
首页 > 其他好文 > 详细

计算机中数据表示

时间:2015-04-26 09:14:10      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

1.  字符

2. 整型数字

3. 浮点型数字

4. 图片,声音,视频


1. 字符

编码主要有输入码、机内码、字形码三种.输入码指的是键盘等外部设备输入内存时的编码,机内码指的是在内存/硬盘中的编码.字形码则是对应到显示器显示的字符点阵.

我们主要讨论机内码.

主要是四种 ascii gbk unicode utf-8

ascii 则是最早的编码,只针对西文和控制符.7Bit 后来扩展到了8位.

gbk 由于ascii不能存储中文,因此我国制定了中文标准,两个字节表示,之前的ascii则低字节最高位为0(Windows上就是默认gbk编码)

unicode 由于全世界人民都用电脑,都要添加字符,不够用.所以用unicode(2B)来同一规范.Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存

UTF-8 如果全是英文则太浪费空间,于是又有了UTF-8的编码方式(注意,这个只是unicode的一种实现方式本质) 汉字一般3字节,用了最小前缀编码方式

ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件

程序中的问题:

1. char 单字节保存ascii  wchar_t 两个字节

#define  LPSTR    char*
#define  LPCSTR  const char*
#define  LPTSTR  TCHAR*
#define  LPCTSTR  const TCHAR*
#define  LPWSTR   wchar_t*
#define  LPCWSTR  const wchar_t*
st,T表示TCHAR,W表示wchar_t。最后说一下TCHAR
#ifdef _UNICODE

#define TCHAR   wchar_t

#else

#define  TCHAR char

#endif
2. 若以文本形式打开文件,则读出的\n字符因操作系统不同而不同.Windows中为13 10 Linux为10.还有就是SUB这个文件终结符


2.整型数字

分为有符号,无符号两种. 考虑到运算与逻辑电路的设计,有符号数用补码存放,因为数据存放是定长的所以运算都是(a calc b)%2^n ,那么我们发现若将一个数减小 eg:a->b(b<a)

可以考虑变成 b+2^n 则c=b+2^n-a

浮点数

IEEE754 标准. 数字分为符号位,尾数位(符号位单独列出,因此用原码表示很方便),阶码位.(移码表示)

eg:float 32位, 1位符号位,23位 尾数,8位阶码.

对于浮点数,阶码的作用是比较大小,对码,因此不涉及运算反而要求

1、比较大小方便,2、特殊值(0和max)被检验比较容易

定义中阶码的范围为-127~128.此时移码定义为127.则横跨了0~255的数域.

如果指数是0并且尾数的小数部分是0,这个数±0(和符号位相关)
如果指数 = 2^{e} - 1并且尾数的小数部分是0,这个数是±∞(同样和符号位相关)
如果指数 = 2^{e} - 1并且尾数的小数部分非0,这个数表示为不是一个数(NaN)。


待续.................



计算机中数据表示

标签:

原文地址:http://blog.csdn.net/gg_gogoing/article/details/45285735

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!