定点数的计算 —— 符号扩展、溢出判断

一、符号扩展

定点数表示的数转换成具有不同位数的某种表示形式。整数的符号扩展在首,小数的符号扩展在尾。其根本目的是:表示的数值保持不变。

  • 对于正数,新表示形式的所有附加位都用0进行填充
  • 对于负数
  1. 符号位保持不变,原码的所有附加位都用0进行填充
  2. 符号位保持不变,反码的所有附加位都用1进行填充
  3. 符号位保持不变,补码的所有附加位都用1(对于整数)或0(对于小数)进行填充

在这里插入图片描述


二、溢出判断

方法一:采用一位符号法

当参加操作的两个数符号相同,结果又与原操作数符号不同,则表示结果溢出。
在这里插入图片描述

方法二:采用双符号位

最高位符号位表示真正的符号,次高位符号位表示操作数的进位

在这里插入图片描述

  1. S1S2=00,表示结果为正数,无溢出
  2. S1S2=01,表示结果正溢出(当两个正数相加)
  3. S1S2=10,表示结果负溢出(当两个负数相加)
  4. S1S2=11,表示结果为负数,无溢出

方法三:采用一位符号位根据数据位的进位情况判断溢出

若符号位的进位 Cs 与最高数位的进位 C1 相同,则说明没有溢出(相当于00,11),否则发生溢出(相当于01,10)

在这里插入图片描述

### 定点数与浮点数的定义及区别 #### 一、定点数的定义 定点数是一种用于计算机内部表示数值的方式,其特点是小数点的位置固定不变。通常情况下,定点数可以分为无符号定点数和带符号定点数两种形式。对于有符号定点数而言,最高位被用来表示符号(正负号),其余位则表示数值大小[^2]。 #### 二、浮点数的定义 浮点数则是另一种更为灵活的数据表示方法,在这种模式下,小数点并非固定在一个特定位置而是可以根据实际需求浮动调整。具体来说,一个典型的浮点数由三部分组成——符号位、尾数以及阶码。其中,尾数决定了该数的有效数字长度即精度;而阶码的作用在于指示小数点应当位于何处从而影响整个数值的表现范围[^1]。 #### 三、两者之间的主要差异分析如下: 1. **表现能力** - 定点数由于受到硬件资源限制较大,因此能够表达出来的绝对值较小,并且不具备处理非常大或者极其微小数量级的能力。 - 浮点数通过引入可变的小数点机制极大地扩展了自己的取值区间,既支持极大又允许极小量级的操作,非常适合科学计算等领域应用场合下的多样化需求[^3]^。 2. **精确度考量** - 使用定点数时因为所有操作都在同一尺度范围内完成所以相对简单直接但也意味着一旦选定某种格式之后就很难再改变它的分辨率特性。 - 而采用浮点数体系虽然提供了更广袤的空间去探索不同规模的对象之间相互作用规律但由于存在舍入误差等问题所以在某些特殊场景比如金融交易等方面可能会带来额外挑战需要特别注意控制累积偏差的影响程度[^1]^。 3. **运算效率对比** - 鉴于大多数现代处理器都针对整型算术指令进行了高度优化的缘故使得执行基于定点算法的速度往往更快一些而且消耗较少的能量成本。 - 反观涉及复杂转换过程较多的浮点运算尽管功能强大却也相应增加了时间开销同时还可能面临更多潜在错误源如溢出/下溢现象的发生几率较高等情况[^2]^。 综上所述可以看出,无论是选择使用哪种类型的数值表述手段都需要依据具体的项目背景条件综合权衡利弊后再做决定。 ```python def example_fixed_point(): value = (1 << 8) | 0b11110000 # Example of a fixed-point number with integer and fractional parts. return value def example_floating_point(): import struct float_value = struct.pack('f', 123.45).hex() # Convert floating point to hexadecimal representation. return float_value ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值