位操作/二进制补码表示法中的边界值/补码产生的原理/补码中的-128从何而来如何表示/原码中的-0在补码中到了哪里/

位操作-二进制补码表示法中的边界值-补码产生的原理

前言

——关于二进制补码表示法中的边界值,这是一个困惑了我许久的问题,今天偶然在 C Primer Plus 书,第十五章看到相关描述,豁然开朗。很多朋友应该都有这样的困惑,在此以纯文本的形式分享,希望对小伙伴们有所帮助。

符号量表示法

	在计算机底层硬件中中,有两种方法表示有符号的整数:
	符号量表示法(sing-magnitude) 和 二进制补码(two's-complement)。
	符号量表示法也许是有符号数最简单的表示方式,
	即用1位(如,高阶位)存储符号,
	剩下7位表示数字本身(假设存储在1字节中)。
	例如,1000 0001表示 -1,0000 0001 表示 1。
	因此表示范围是 -127 ~ +127 。这是大家所熟知的,
	这种方法的缺点是有两个 0 :+0 和 -0 。
	这种容易混淆,而且用两个位组合来表示一个值也有些浪费。

二进制补码

	二进制补码(two's-complement)方法避免了这个问题,
	是当今最常用的系统。我们将1字节为例,讨论这种方法。
	二进制补码用 1 字节中的后 7 位表示 0 ~ 127 ,高阶位设置 0 。
	目前,这种方法和符号量的方法相同。
	另外,如果高阶位是 1 ,表示的值为负。
	这两种方法的区别在于如何确定负值。
	
	从一个 9 位组合 1 0000 0000( 256 的二进制形式)
	减去一个负数的位组合,结果是改负值的量。
	例如,假设一个负值的位组合是 1000 0000,
	作为一个无符号字节,该组合为表示 128;
	作为一个有符号值,该组合表示负值(编码是 7 的位为 1 ),
	而且值为 1 0000 0000 - 1000 0000 ,即 1000 0000( 128 )。
	因此,该数是 -128 (在符号表示法中,该位组合表示 -0 )。
	类似的, 1000 0001 是 -127 , 1111 1111 是 - 1 。
	该方法可以表示 -128 ~ +127 范围内的数。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值