程序员视角的计算机系统 2.2.3 二进制的补码的编码

本文探讨了二进制补码表示法,特别是在计算机系统中如何表示带符号的整数。详细介绍了4位二进制补码的具体表示方法,包括其在无符号和有符号情况下的转换,并给出了具体的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序员视角的计算机系统 2.2.3 二进制的补码的编码
对于许多的应用,我们期望表示负数。绝大部分的计算机的有符号的数的表示是2补码形式。
这个定义把最高位解释为负的权重值。我们表达这个解释为B2Tw:

最高位也叫做符号位。它的大小是-2^(w-1)  当符号位为1时,表示的值是负的,当符号位为0,
表示的值为非负数。


让我们考虑一下能被w位长的2补码表示的数的范围。最小值是[10....00]它的值是TMinw=-2^(w-1)
最大值是[01....11]它的值是TMaxw=2^(w-1)-1

我们能看到B2Tw是长度为w的位模式到TMinw与TMaxw的范围之间的数的一个映射。正如我们看到的
无符号的表示,每个有符号数有唯一的编码表示。在数学的术语中,我们说函数 B2Tw是一个双射。

练习问题2.17

假定w=4,我们把一个可能的十六进制的数字赋值给一个值,假定它是无符号数或者是
二补码的有符号数,根据这些解释,填写如下的空白处,使用公式2.1和2.3:

十六进制     二进制      转为无符号的4位          转为有符号的4位
____________________________________________________________
0xE            [1110]       2^3+2^2+2^1=14        -2
0x0            ______           ___________             _______
0x5            ______           ___________             _______
0x8            ______           ___________             _______
0xD           ______           ___________             _______
0xF           ______           ___________             _______

图2.13 显示了对于不同的字大小的情况下,一些重要的数的位模式与数值的值。
前三个是可表示的整数的范围,使用符号UMaxw,Tminw,TMaxw.我们将在讨
论中经常引用这三个特殊的值。

两补码是不对称的:|TMin|=|TMax|+1.正如我们看到的,这会导致二补码算术
的一些特定的性质,并且成为一些微妙的程序错误的来源。因为0是非负数,这意味
着这种编码表示的正数比负数少一个。第二,UMax=2*TMax+1。

C标准没要求有符号数被表示为2补码的形式,但是几乎所有的机器都是这样做的。
关注最大化可移植性的程序员不应该假定可表示的数的任何的特定的范围。

Java标准 在整数数据类型的范围和表示方面是非常特别的。它要求二补码表示方法有
精确的范围。它没有Long long这个类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值