信息表示
定点数和浮点数
在计算机中, 含有小数的数根据存储和处理的方式分为两种:
- 定点数
- 浮点数
定点数
定点数: 小数点的位置是约定好固定的, 按照顶点的位置分隔出整数部分和小数部分.
如: 25.125 (D, 8bit存储)
- 整数部分: 25使用二进制表示为11001 (B)
- 小数部分: 0.125使用二进制表示为 .001 (B)
- 合并起来就是: 1 1001.001 (B)
上面的例子我们约定了8bit中的前5位作为整数部分, 后3位作为小数部分,
但是这种方式会有两个缺点, 其一是可能会有被浪费的数据位, 其二就是能表示的精度很小.
浮点数
浮点数: 顾名思义就是小数点的位置不固定, 其表示方式类似于科学计数法(规格化).
如: 112.5 (D, 单精度IEEE754标准)
- 转二进制 111 0000.1 (B)
- 规格化(类似科学计数法) 1.1100 001 * 2^6 其中6是十进制, 其余为二进制
- 进行阶码偏移量处理 6 + 127 = 133 (D) = 1000 0101 (B)
- 根据 符号位, 阶码, 尾数 的占位进行填充
0(1位符号位) 10000101(8位阶码) 11100001…补0(23位尾数)
IEEE754标准 单精度为32位 1位符号位 8位阶码 23位尾数 阶码偏移量为127
双精度则是64位 1位符号位 11位阶码 52位尾数 阶码偏移量为1023
进制
进制后缀
- 二进制(BIN) B
- 八进制(OCT) O或Q
- 十进制(DEC) D
- 十六进制(HEX) H
进制间相互转换(定点数)
- 二进制转十进制(其他进制同理)
- 十进制转二进制(其他进制同理)
机器数
机器数的相互转换
正数
原码, 反码, 补码都一样.
负数
反码的转换
- 原码->反码: 除了符号位外, 所有位取反.
- 反码->原码: 除了符号位外, 所有位取反.
补码的转换
- 原码->补码: 除了符号位外, 所有位取反, 最低位+1(也就是反码+1, 注意先取反再+1).
- 补码->原码: 除了符号位外, 最低位-1, 所有位取反.
反码和补码的意义
反码和补码的出现都是为了解决计算机不能做减法的问题. 但其实反码已经解决了减法问题了,
但是使用反码会出现一个问题, 就是会出现+0和-0, 也就是0000和1111. 这会导致0的编码值在
计算机中不是唯一的.
需要注意计算机中的加减法都是使用补码进行运算的, 结果也是补码, 但显示的是原码.
补码原理
从结果论的表现的来说, 原理就是利用了模的溢出, 将模的溢出参与到计算当中, 就如同时钟上12-2和12+10的结果是一样的.
至于真正为什么补码要这么设计, 可以看看下面引用的链接.
计算机补码运算背后的数学原理是什么? - Sunanki的回答 - 知乎
https://www.zhihu.com/question/30395946/answer/328785755
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 为世界上所有的美好而战.!