二进制表示整数、浮点数的方法
二进制表示整数、浮点数的方法
二进制数(binary number)用 2 个数字作基础,其中每一个二进制数字(称为位,bit)不是 0 就是 1。在书写较大的二进制数时,有些人喜欢每 4 位或 8 位插入一个点号,以增加数字的易读性。比如,1101.1110.0011.1000.0000 和 11001010.10101100。
源码、补码、反码
根据冯·诺依曼提出的经典计算机体系结构框架,一台计算机由运算器、控制器、存储器、输入和输出设备组成。其中运算器只有加法运算器,没有减法运算器。所以计算机中没办法直接做减法的,它的减法是通过加法实现的。现实世界中所有的减法也可以当成加法的,减去一个数可以看作加上这个数的相反数,但前提是要先有负数的概念,这就是为什么不得不引入一个符号位。原码、反码、补码的产生过程就是为了解决计算机做减法和引入符号位的问题。
源码:
是最简单的机器数表示法,用最高位表示符号位,其他位存放该数的二进制的绝对值。
0001+0010=0011,1+2=3; 0000+1000=1000,+0+(-0)=-0; 0001+1001=1010,1+(-1)=-2。
于是可以看到其实正数之间的加法通常是不会出错的,因为它就是一个很简单的二进制加法,而正数与负数相加,或负数与负数相加,就要引起莫名其妙的结果,这都是符号位引起的。0分为+0和-0也是因它而起。
负数的的反码 = 它的原码符号位不变,其他位取反(0 ->1 ; 1->0 );负数的补码 = 它的反码 +1;无符号整数的源码、反码、补码是一样的。
整数二进制表示
其中有:整型(integer),无符号数(unsigned),有符号数(signed)。
- 无符号整型表示
数据在计算机中的表示有位宽(bits)要求,这是由于寄存器或存储单元有位宽限制,常见的位宽有8bits(字节),16bits(半字),32bits(字),64bits(双字),
甚至有128bits。正因为如此,我们使用C语言定义整型变量时,需要考虑变量是short,int,long或是long long。假设位宽为4bits,则能表示最小的数为(0000),
最大的数为(1111):
![]()
- 有符号数整型表示
浮点数二进制表示
IEEE浮点标准用 的形式表示一个小数:
S表示符号,位数为1,s=1表示负数,s=0表示正数;
M表示尾数,是有效数字位数用k表示,是二进制小数,取值范围为[0,1),或者[1,2);
E表示阶码,位数用n表示,作用是对浮点数进行加权。
举例来说,十进制的5.0,写成二进制是101.0,相当于1.01×2^2。那么,按照上面V的格式,可以得出s=0,M=1.01,E=2
m称作尾数,用原码表示。e称作阶数,用补码表示
posted on 2021-03-08 14:22 Ultraman_X 阅读(445) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话