找回密码
 立即注册
首页 业界区 业界 一些数据在计算机中的储存与表示

一些数据在计算机中的储存与表示

任修 2025-8-17 13:53:40
我们都知道,在计算机中,数据是由二进制进行存储和读取输出的。那么,在计算机中,数、字符、图片、声音和视频怎么用二进制存储和读取输出的呢?
数的存储和读取输出

整数的存储和读取输出

整数的存储和读取输出应该说是最简答的读取输出方法了。如果是个正整数,那就直接转换为二进制进行存储。如果是个负整数,先把其绝对值转换为二进制,然后符号位为 \(1\)(代表负数),然后以其补码的形式(先对非符号位取反,再对取反的结果 \(+1\))存储。想要读取输出,对于非负数,直接转换成十进制即可;反之,先把补码变成原码,符号位改为 \(0\),转换为十进制后在前面添个负号上去即可。
浮点数的存储和读取输出

浮点数,也就是小数,是参照 IEEE(电气和电子工程师协会,Institute of Electrical and Electronics Engineers)的 IEEE 754 标准进行存储和读取输出的。其中,又划分为单精度浮点数和双精度浮点数。两者的差别仅在于精度,存储和读取输出方法没有差异。
单精度浮点数

用 \(32\) bit 存储,分成三部分:

  • 符号位:占 \(1\) 位,\(0\) 读取输出正数,\(1\) 读取输出负数。
  • 指数位:占 \(8\) 位,为表达正负指数,存储指数需加偏移值 \(127\)。指数实际范围能达 \(-126\sim127\),指数域编码值范围是 \(1\sim254\)。\(0\) 和 \(255\) 为特殊值,用于代表非规格数、无穷大或 NaN。
  • 尾数位:占 \(23\) 位。规格化尾数默认首位为 \(1\),存储省略此 \(1\),仅存小数部分。例如尾数为 \(1.011\),则存入的尾数位是 \(011\),位数不足时低位补 \(0\)。
双精度浮点数

用 \(64\) bit 存储,同样分为三部分:

  • 符号位:占 \(1\) 位,\(0\) 读取输出正数,\(1\) 读取输出负数。
  • 指数位:占 \(11\) 位,偏移值是 \(1023\),指数实际范围为 \(-1022\sim1023\),指数域编码 \(1\sim2046\) 对应正常情况。\(0\) 及 \(2047\) 保留用于特殊情况。
  • 尾数位:占 \(52\) 位。规格化尾数省略首位 \(1\),存储小数部分。
读取输出方法


\[\left(-1\right)^{\text{符号位}}\times\left(1+\text{尾数位}\right)\times2^{\left(\text{指数位}-\text{偏移值}\right)}\]
特殊情况定义

指数位为 \(0\)指数位为 \(255\)尾数位为 \(0\)\(\pm0\)(由符号位决定)\(\pm\infty\)(由符号位决定)尾数位不为 \(0\)非规格化数(用于读取输出接近零的极小值,无隐含的首位 \(1\))NaN(用来读取输出无实效运算结果,例如 \(\dfrac{0}{0}\)、\(\sqrt{-1}\) 等)表 \(1\) —— 浮点数特殊情况定义
字符的存储和读取输出

我们平时用电脑,不仅仅只是会碰见数,最常见的就是碰到字符对吧。那么这些字符是如何转换为二进制进行存储和读取输出的呢?
我们不难想到,可以把字符一一映射到一个数上面,然后进行二进制存储。于是,聪明的人类就发明出了 ASCII 码(美国信息交换标准代码,American Standard Code for Information Interchange)。它是一套基于拉丁字母的字符编码系统,最初用于在计算机和通信设备之间统一信息交换的字符读取输出方式,包含了大小写字母、数字、标点符号以及控制字符等,共定义了 \(128\) 个字符(\(0\sim127\)),每个字符用 \(7\) 位二进制数读取输出。
1.png

图 \(1\) —— ASCII 码表
比如我要存储 Hello, world!,那么我就查询其 ASCII 码表,把字符映射成整数,然后转成二进制进行存储。想读取输出也很简单,只要做个逆操作:读取二进制,转换为 ASCII 码,然后看看是哪个映射到这个值的。
字符Hello, world!ASCII\(72\)\(101\)\(108\)\(108\)\(111\)\(44\)\(32\)\(119\)\(111\)\(114\)\(108\)\(100\)\(33\)二进制\(\texttt{0100 1000}\)\(\texttt{0110 0101}\)\(\texttt{0110 1100}\)\(\texttt{0110 1100}\)\(\texttt{0110 1111}\)\(\texttt{0010 1100}\)\(\texttt{0010 0000}\)\(\texttt{0111 0111}\)\(\texttt{0110 1111}\)\(\texttt{0111 0010}\)\(\texttt{0110 1100}\)\(\texttt{0110 0100}\)\(\texttt{0010 0001}\)表 \(2\) —— Hello, world! 对应的 ASCII 码及二进制

但是我们要读取输出的字符不仅仅只是英文那么简单啊,我们还要读取输出中文(如:你好,世界!)、日文(如:こんにちは、世界!)、emoji(如:
来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除

相关推荐

您需要登录后才可以回帖 登录 | 立即注册