复习一个知识点——原、反、补码以及取反操作

本文深入讲解了计算机中数值表示的基本概念,包括机器数与真值、原码、反码及补码的概念,并详细分析了使用补码进行运算的原因及其优势。通过具体的例子展示了不同编码方式下加减法的计算过程,解释了为何补码能够有效解决符号位带来的问题。

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

一、相关概念

1.1  机器数与真值

  ·机器数  计算机中存储的数据都是带符号的二进制数,例如:5 → 0000 0101 , -5 → 1000 0101  此类数值称之为机器数。

  ·真值   为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。如:1000 0101的形式值为133,但它实际表示的值为-5,-5称之为真值。

1.2  原、反、补码

  ·原码  符号位加上真值的绝对值。如+5和-5的原码分别为:0000 0101和1000 0101

  ·反码  正数的反码是它本身,负数的反码是将它原码的符号位不变,其余各位按位取反。  如+5和-5的反码分别为:0000 0101和1111 1010

  ·补码  正数的补码是它本身,负数的补码是将它原码的符号位不变,其余各位按位取反再加1(其实就是反码+1)。如+5和-5分补码分别为:0000 0101和1111 1011

 

二、为何要用原、反、补码

2.1  符号位的问题

  我们已知正数的原、反、补码都是相同的,但对于负数来说确是完全不同。在处理加减乘除等运算时,若是人脑来进行,我们可以将符号位抽象出来然后直接操作真值即可。但若交由计算机完成,若还需提前去识别符号位,则会大大增加计算机基础电路的复杂度,故需要考虑带着符号位进行计算。

考虑一个1-1的问题:

·原码计算:1-1 = 1+(-1)= [0000 0001]原 + [1000 0001]原 = [1000 0010]原 =-2   结果显然不对

·反码计算:1-1 = 1+(-1)

        = [0000 0001]原 + [1000 0001]原

        = [0000 0001]反 + [1111 1110]反

        = [1111 1111]反

        = [1000 0000]原 = -0

  从结果来看,真值部分是对的,但0前面出现负号是无意义的。反而会引入1000 0000的机器码表示数值0,从而与0000 0000表示的0引起冲突,故而补码码应运而生。

·补码计算:1-1 = 1+(-1)

        = [0000 0001]原 + [1000 0001]原

        = [0000 0001]补 + [1111 1111]补

        = [0000 0000]补

        = [0000 0000]原 = 0

  可见,使用补码运算解决了符号位带入的问题和0的符号问题。值得注意的是,在补码的运算结果中,[1000 0000]补 代表的数值为-128,但由于该补码使用的是之前-0的原码,故-128是没有原码和反码表示的。有此也可以引申出,8位二进制值的原码或反码的表示范围为[-127,127],而补码的则为[-128,127]。

2.2  总结

  ·数字电路的CPU中仅实现了加法器,为实现减法器,减法都是通过转换为加法进行计算的。

  ·负数在计算机中是以补码的形式存储的,计算过程也是用补码实现的。

 

三、反码与取反

 

  初学时容易将两个概念混淆,前面已经提到,计算机中数据的存储和计算都是以补码的形式进行的。故取反这一过程也是围绕补码展开的,与反码这一概念并无关系。

看一个+5和-5取反的过程:

  +5 = [0000 0101]原 → [0000 0101]补 →按位取反→ [1111 1010]补 → [1000 0110]原 = -6

  -5 = [1000 0101]原 → [1111 1011]补 →按位取反→ [0000 0100]补 → [0000 0100]原 = 4

可见,对一个数取反都是先求得该数的补码,对补码进行按位取反,然后对结果再求补码即可。快速计算方法:对数a取反,结果为-(a+1)。

 

 

转载于:https://www.cnblogs.com/jing-wen/p/9128699.html

电动汽车数据集:2025年3K+记录 真实电动汽车数据:特斯拉、宝马、日产车型,含2025年电池规格和销售数据 关于数据集 电动汽车数据集 这个合成数据集包含许多品牌和年份的电动汽车和插电式车型的记录,捕捉技术规格、性能、定价、制造来源、销售和安全相关属性。每一行代表由vehicle_ID标识的唯一车辆列表。 关键特性 覆盖范围:全球制造商和车型组合,包括纯电动汽车和插电式混合动力汽车。 范围:电池化学成分、容量、续航里程、充电标准和速度、价格、产地、自主水平、排放、安全等级、销售和保修。 时间跨度:模型跨度多年(包括传统和即将推出的)。 数据质量说明: 某些行可能缺少某些字段(空白)。 几个分类字段包含不同的、特定于供应商的值(例如,Charging_Type、Battery_Type)。 各列中的单位混合在一起;注意kWh、km、hr、USD、g/km和额定值。 列 列类型描述示例 Vehicle_ID整数每个车辆记录的唯一标识符。1 制造商分类汽车品牌或OEM。特斯拉 型号类别特定型号名称/变体。型号Y 与记录关联的年份整数模型。2024 电池_类型分类使用的电池化学/技术。磷酸铁锂 Battery_Capacity_kWh浮充电池标称容量,单位为千瓦时。75.0 Range_km整数表示充满电后的行驶里程(公里)。505 充电类型主要充电接口或功能。CCS、NACS、CHAdeMO、DCFC、V2G、V2H、V2L Charge_Time_hr浮动充电的大致时间(小时),上下文因充电方法而异。7.5 价格_USD浮动参考车辆价格(美元).85000.00 颜色类别主要外观颜色或饰面。午夜黑 制造国_制造类别车辆制造/组装的国家。美国 Autonomous_Level浮点自动化能力级别(例如0-5),可能包括子级别的小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值