计算机补码和模的概念

补码与模概念解析

名词解释:

补码:1 在计算机系统中,数值一律有补码来表示(存储). 使用补码,可以将符号位和其他位统一处理;同时,减法也可按加法来处理.另外,两个用补码表示的数据相加时候,如果最高位(符号位)有进位,则进违被舍弃.

         2 补码与原码的转换过程几乎是相同的                 

            数值的补码表示也分两种情况:
                (1)正数的补码:与原码相同. 例如,+9的补码是00001001

                (2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1

                       例如:-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值+7的原码 0000111按位取反为111000;

                                再加1,所以-7的补码是11111001.
            已知一个数的补码,求原码的操作分两种情况:

                (1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码.
                (2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取 反,然后再整个数加1.
                       例如:已知一个补码为11111001,则原码是10000111(-7):因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”;其余7
                                位1111001取反后为0000110;再加1,所以是10000111.

 

下面稍微介绍一下“模” 的概念:

“模”是指一个计量系统的计数范围.如时钟等.计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”.

例如:时钟的计量范围是0~11,模=12.表示n位的计算机计量范围是0~2(n)-1,模=2(n).【注:n表示指数】

 

“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数.任何有模的计量器,均可化减法为加法运算.
例如: 假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:
          一种是倒拨4小时,即:10-4=6
          另一种是顺拨8小时:10+8=12+6=6
          在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替.
          对“模”而言,8和4互为补数.实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特性.共同的特点是两者相加等于模.
          对于计算机,其概念和方法完全一样.n位计算机,设n=8, 所能表示的最大数是11111111,若再加1称为100000000(9位),但因只有8位,最高位1自然丢失.又回了00000000,所以8位二进制系统的模为2(8). 在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了.把补数用到计算机对数的处理上,就是补码.

 

ps:本文转自lujiadontcry的blog,原文地址在这里:http://lujiadontcry.javaeye.com/blog/304978 ,这篇文章对补码和模说的非常浅显易懂,
    所以转载了过来,题目被我改成了新的,但是原作者没变!

### 三、4补码2补码的定义及区别 #### 3.1 2补码(Two's Complement Modulo 2) 2补码计算机中最常见的整数表示方法,它基于二进制系统,用于表示有符号整数。其基本定义是: - 正数的补码与原码相同。 - 负数的补码是其反码加 1,即原码取反后加 1 [^1]。 2补码的一个重要特性是其“”为 $ 2^n $,其中 $ n $ 是表示整数的位数。例如,在 8 位系统中,为 $ 2^8 = 256 $。这意味着所有运算都在 $ 2^n $ 下进行,超过该的进位会被自动丢弃。 2补码的优点包括: - 运算规则简单,加法减法可以统一处理。 - 不存在正负零的问题,只有一个零。 - 便于硬件实现,广泛应用于现代计算机系统中 [^2]。 #### 3.2 4补码(Four's Complement) 4补码运算在四进制(基数为4)系统中的补码表示方式。其定义为: - 对于正数,其4补码与原码相同。 - 对于负数,其4补码等于4减去该数的绝对值,即 $ C = M - |N| $,其中 $ M = 4^n $,$ n $ 为位数。 例如,在 2 位四进制系统中,为 $ 4^2 = 16 $。若某数为 -3,则其4补码为 $ 16 - 3 = 13 $,在四进制中表示为 `31`(即 $ 3 \times 4^1 + 1 \times 4^0 $)。 4补码的特点: - 适用于四进制计算系统,较少用于现代二进制计算机。 - 具有类似2补码的溢出处理机制,但其基数不同。 - 表示范围运算规则与2补码不同,适用于特定的非二进制架构 [^3]。 #### 3.3 4补码2补码的区别 | 特性 | 2补码(Two's Complement) | 4补码(Four's Complement) | |--------------------|----------------------------------|-----------------------------------| | 基数 | 2 | 4 | | 值 | $ 2^n $ | $ 4^n $ | | 应用领域 | 广泛用于现代计算机系统 | 理论研究或特定非二进制系统 | | 表示形式 | 二进制 | 四进制 | | 零的表示唯一性 | 是 | 是 | | 加减法统一性 | 是 | 是 | | 实现复杂度 | 简单,硬件实现容易 | 复杂,需转换为四进制处理 | ### 示例:2补码4补码的表示 以 8 位2补码 4 位4补码表示 -5: - 2补码(8位): - 原码:`10000101` - 反码:`11111010` - 补码:`11111011` [^3] - 4补码(4位): - 为 $ 4^4 = 256 $ - -5 的4补码为 $ 256 - 5 = 251 $ - 四进制表示为 `3323`(即 $ 3 \times 4^3 + 3 \times 4^2 + 2 \times 4^1 + 3 \times 4^0 $) ```python # 2补码计算示例 def twos_complement(n, bits): """返回n在bits位下的2补码""" if n >= 0: return bin(n)[2:].zfill(bits) else: return bin((1 << bits) + n)[2:] # 4补码计算示例(转换为四进制) def fours_complement(n, digits): """返回n在digits位下的4补码(四进制表示)""" mod = 4 ** digits comp = (mod - abs(n)) % mod # 将补码转换为四进制字符串 quaternary = '' while comp > 0: quaternary = str(comp % 4) + quaternary comp //= 4 return quaternary.zfill(digits) # 测试 print("2补码(-5, 8位):", twos_complement(-5, 8)) print("4补码(-5, 4位):", fours_complement(-5, 4)) ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值