计算机中数据表示

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)。


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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值