取反(~)和相反数 是不一样的!!!

本文探讨了计算机内部数字的存储方式——补码,通过对比原码和反码,突出了补码在计算中的优越性。介绍了补码的基本概念及其如何实现两个相反数相加得零的规则。

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

这几天正在看补码的问题,发现这个东西实在是太神奇了,

在计算机存储的都是按照补码的方式,这样的方式可以进行计算,但是除了补码还有原码和反码

他们虽然都可以表示数字,但是原码和反码不能进行计算,就是不符合计算规则,怎么使用都是不行的


这个时候就出现了,补码的规则,这种规则可以让计算几中的数字进行计算,简单的说就是

让两个相反数相加结果为0,按照补码的规则是可以行的通的。


在这里我就要简单的说一下,取反操作和一个数字的相反树,这两个操作是不一样的,

他们之间是有区别的:


什么是取反操作呢,简单的讲在计算中我们都是知道任何数字还是字符都是以二进制形式存在的。

取反的操作就是在写变量名之前加上一个(~)符号之后就是进行的取反操作,他是把二进制中1 变成 0,0 变成 1

由于二进制中除了1 就是 0 ,所以,可以这样的操作。


什么是相反数呢 ?

小学的时候自己有没有给一个数字进行相反数的操作,这样的例子实在是太多了,但是在计算机中是不一样的操作

首先你要明白,如何表示负数,这个负数的概念在一开始学习变成语言的时候我是不明白的,在后来的学习的过程中

我清楚的知道了,这个负数和整数的储存是有区别,

例如:

一个 变量里 存放了一个 数字 3

请问他的二进制形式是多少呢 ?

这样的问题在一开始学习编程语言的时候经常的遇到

答案就是 :0000 0011


但是你有没有想过 -3 是什么样的二进制 :

要想知道-3在计算机中的二进制形式也是非常简单的:

只要把他进行按位计算就可以一个一个的输出来

答案是 : 1111 1101


这就是-3的二进制表示形式,虽然在学校里我们知道在二进制的最高位

是用来表示他们的符号的,简称符号位,但是你有没有发现就算是最高位是1

但是其他位也不需要1这个数字了,为什么出现了这样的二进制形式呢?


答案就是他使用了 补码表示法 :

在创建补码表示法的时候,发现,如果给一个数字进行取反,然后在末尾加1之后在和原来的数字相加一定会等于0

所以,补码表示法就这样创建了。


利用补码表示法就可以简单的进行计算了,而且十分的简单。































<think>好的,我需要回答用户关于原码、反码、补码以及正数相反数在计算机中的表示,还有乘除法的运算规则的问题。首先,我得回忆一下这些基本概念。 原码就是最直观的二进制表示,最高位是符号位,后面是数值。比如+5是00000101,-5是10000101。但原码的问题在于加减法处理复杂,特别是符号位同的情况,需要额外的逻辑判断。 接下来是反码。正数的反码原码一样,负数的反码是符号位变,其他位取反。例如,-5的原码是10000101,反码就是11111010。过反码在运算时还是有符号位的问题,可能会导致循环进位,比如两个负数相加可能需要再加1。 补码的出现解决了这些问题。正数的补码变,负数的补码是反码加1。-5的反码是11111010,补码就是11111011。使用补码后,加减法可以统一处理,符号位直接参与运算,需要额外处理,这样硬件设计更简单。比如,补码的加法可以直接相加,溢出部分自然丢弃,结果正确。这在引用3里提到过,补码让加减法转换成两个正数的加法,方便计算机处理。 关于0的表示,原码反码都有+0-0的区别,而补码统一为00000000,避免了歧义。这点在引用1引用2都有说明。 接下来是正数相反数的表示。正数用原码、反码、补码都一样相反数在补码系统中,可以通过取反加1得到。例如,5的补码是00000101,-5的补码就是11111011。这在引用2中有例子说明。 乘法除法的运算规则。补码的乘除法原码同,通常会将补码转换为原码进行运算,或者使用特定的算法,比如Booth算法来处理有符号数的乘法。除法的话,一般也是转换为原码,或者通过移位加减来实现,但需要考虑符号位。这部分可能需要详细说明步骤,比如乘法时符号位单独处理,数值部分相乘,最后结果的符号由原符号位异或决定。引用中没有直接提到乘除法的具体步骤,但根据所学知识,补码乘除相对复杂,通常需要特殊处理。 用户可能还关心运算中的溢出问题,比如补码加减法中的溢出判断,以及乘除法中的溢出如何处理。这也是需要注意的地方。 总结一下,我需要分点解释原码、反码、补码的定义转换方法,说明正数相反数的补码表示,然后讲解乘除法的运算规则,可能涉及符号处理具体算法。同时结合引用中的内容,比如补码如何简化加减法,反码的生成方式等,确保回答准确并引用相关来源。</think>### 正码、反码、补码的概念及运算规则 #### 一、原码、反码、补码的定义 1. **原码** - 最高位为符号位(`0`表示正,`1`表示负),其余位表示数值大小。 - 示例: $+5$ 的原码:$0000\,0101$ $-5$ 的原码:$1000\,0101$[^1] 2. **反码** - **正数**的反码与原码相同;**负数**的反码是符号位变,其余位取反。 - 示例: $-5$ 的反码:$1111\,1010$[^1][^2] 3. **补码** - **正数**的补码与原码相同;**负数**的补码是反码加$1$。 - 示例: $-5$ 的补码:$1111\,1011$[^1] - **0的补码**:统一为$0000\,0000$,无`+0``-0`之分[^1]。 #### 二、正数与相反数的表示 - **正数**:原码、反码、补码均相同。 示例:$+3$ 的补码:$0000\,0011$ - **相反数**:对补码取反后加$1$。 示例:$-3$ 的补码:$1111\,1101$(即$0000\,0011$取反得$1111\,1100$,再加$1$)[^3]。 #### 三、乘法与除法运算规则 1. **乘法** - **符号处理**:结果的符号由两数符号位异或决定($0$为正,$1$为负)。 - **数值计算**: - 原码乘法:绝对值相乘,符号单独处理。 - 补码乘法:需转换为原码或使用**Booth算法**(基于补码的位移加减操作)。 - 示例: $$(-5) \times 3 = -15$$ 计算时先将$-5$的补码转换为绝对值$5$,相乘后添加负号[^3]。 2. **除法** - **符号处理**:与乘法类似,符号位异或决定结果符号。 - **数值计算**: - 原码除法:绝对值相除,符号单独处理。 - 补码除法:通常转换为原码,或通过**加减交替法**实现。 - 示例: $$(-15) \div 3 = -5$$ 先计算绝对值$15 \div 3 =5$,再添加负号[^3]。 #### 四、补码的核心优势 - **统一加减法**:补码将减法转换为加法(例如 $A - B = A + (-B)$),硬件实现更简单[^3]。 - **避免双零问题**:补码中`0`唯一表示为$0000\,0000$,无歧义[^1]。 --- ###
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值