计算机中数据表示

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

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

时间: 2024-10-15 12:24:26

计算机中数据表示的相关文章

浮点数在计算机中存储方式

浮点数在计算机中存储方式 C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是float还是double在存储方式上都是遵从IEEE的规范的, float遵从的是IEEE R32.24 ,而double 遵从的是R64.53. 无论是单精度还是双精度在存储中都分为三个

计算机中的进制

在学习编程的过程中,经常见到二进制,十进制,十六进制,到底进制表示什么意思呢?进制,字面意思,前进的制度,在数字方面,就是数字前进的制度,数字怎么向前进,那就是进位,我们在做加法运算的时候都会用到进位,8+3,我们会写个1,然后向前进一位,数数的时候更是如些,1,2,3......10, 我们不会再向下数11,12 ..... ,而是在心中放一个1, 然后再1,2,3,4,......10, 到10之后, 我们也不会向下数,而是在心中再记一个1,那么心中的数字就是2了,继续向下数,1,2,3,数

计算机中如何实现除数是2的幂次的除法【转载自CSDN】

前言: 本来是在看汇编里面的数据条件传送指令,做习题的时候看着这么一道有关于2的幂次方除法的题目.结果傻眼了,又尼玛不会了.........第二章看的时候就稀里糊涂的,看了几遍也没看太懂,这回又涉及到了 ,发现再回来看还是容易一点.所以写此博文,方便日后复习. 我今天遇到的问题如下: 问题: 除法,在我们平时的算数运算中,结果总是向0的方向舍入的,但是在计算机中,舍入的方式有所不同.在大多数的机器中,除法要比乘法还有加法这些运算都要慢很多倍,计算机中对于2的幂次这种数很是敏感,因为计算机当中用到

计算机中数字的二进制存储形式

今天,做个关于二进制的算法题,突然有个问题一直想不通为什么~5是6,计算机基础知识不过关啊,所以现在来弥补下,正数和负数在计算机中是怎么存储和计算的. 讲讲计算机中的存储形式: 计算机中存储的数都是以补码的方式存储的,而正数的原码,反码,补码都是一样的.但是负数的原码,反码,补码是不一样的. 下面都是以java中的int i=5为例. 正数5的原码就是其二进制码:00000000 00000000 00000000 00000101 反码是:00000000 00000000 00000000

安装apache服务出错,无法启动此程序,因为计算机中丢失VCRUNTIME140.dll 尝试重新安装此程序以解决此问题

错误信息:无法启动此程序,因为计算机中丢失VCRUNTIME140.dll 尝试重新安装此程序以解决此问题 错误场景:在使用["D:\Program Files\httpd-2.4.20-x64-vc14-r2\Apache24\bin\httpd.exe" -k install -n apache]命令,在DOS命令行窗口下安装 apache服务时报错. 错误分析: 解决办法:下载vc++2015 并安装 链接如下:https://www.microsoft.com/zh-cn/do

负数在计算机中的表示 Byte-128

http://blog.csdn.net/njuitjf/article/details/4585247 今天,老大让我调查一个浮点数转换为整数的问题.自己就查了些资料,顺便复习一下原码.反码和补码. 原码:将一个整数,转换成二进制,就是其原码.如单字节的5的原码为:0000 0101:-5的原码为1000 0101. 反码:正数的反码就是其原码:负数的反码是将原码中,除符号位以外,每一位取反.如单字节的5的反码为:0000 0101:-5的原码为1111 1010. 补码:正数的补码就是其原码

删除“计算机”中不提供删除选项的系统文件夹

注册表HKEY_CLASSES_ROOT\CLSID\{36AAB89D-9FF5-4128-9BAE-B9867A245192},将这一项全部删除,这 时在我的电脑中只剩下一个未知文件,再定位到HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\ 删除"计算机"中不提供删除选项的系统文件夹,布布扣,bubuko.com

计算机中的编码问题

计算机中的编码问题 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节.比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295. 一.目前常用的编码 ASCII编码:由于计算机是美国人发明的,因此,最早只有127个字母被编码到计算机里,也就是大小

《计算机中可编程内存分析》

博主最近刚看了一些斯坦福大学的内存分析课,结合以前做的内存分析, 今天将计算机中可编程的内存做一个分析. 在计算机的可编程内存中,我们一般分为三个区域:静态存储区,栈区,堆区.内存模型如下所示:  静态内存区在程序编译的时候就已经被分配完毕,这块内存在整个计算机内存中位于较低的地址(例如0000),这块内存在整个程序运行期间都存在,静态内存区主要存放的是静态变量.全局变量.常量. 堆区:我们有时候也将堆区称作动态内存区分配区,程序再运行的时候通过new关键字申请得到的任意大小的内存(我们使用ne