二进制的加法减法运算

一、二进制的加法
对于十进制加法:9+1,进位变10

对于二进制加法也需要进位

例1
此时的a,b是整型提升后的结果,此处只为讲解二进制的加法运算。
a和b进行相加 变为c
a:00000000000000000000000000000011
b:00000000000000000000000001111111
c: 00000000000000000000000010000010

从右向左1+1,为2,余0进1,变为0
进1后,1+1+1,为3,余1进1,变为1
进1后,0+1+1,为2,余0进1,变为0
进1后,0+1+1,为2,余0进1,变为0
进1后,0+1+1,为2,余0进1,变为0
进1后,0+1+1,为2,余0进1,变为0
进1后,0+1+1,为2,余0进1,变为0
进1后,0+0+1,为1,变为1

例2 两个八位二进制进行相加,要8位的结果
因为都是8位所以可以直接运算
若是一个8位+一个3位
需要将3位的二进制位,前面补上5个0,变成8位。

11001101
+10001001
——————
101010110
因为要8位的结果,所以左边多出的一位不要
最终等于 01010110

二、二进制的减法
(二进制的减法运算也可以等于加法运算,计算机一般只进行加法运算,他将乘法除法都变为了加法运算,本质上,乘法是加法运算,除法是减法运算)

例1 八位二进制 减 3位二进制,要8位的结果
1010010 - 110
将3位二进制补0凑够八位
110 变为 00000110

10100010
-00000110
——————
因为刚才学了加法运算,此处将减法运算变为加法运算

10100010 +(-00000110)

(知识点复习)
原码
整数最高位表示符号位,-1为负数
最高位为1 表示(负数),最高位为0 表示(正数)
10000000000000000000000000000001 且整形有32个比特位。
最高位的1表示符号位(这串十进制的值为-1)

整数在内存中存的是 补码~ 一个整数的二进制表示有三种:
1:原码
2:反码
3:补码
正整数: 原码、反码、补码、相同(三者一样)
原码 取反 +1得到补码
补码 -1得反码 反码取反得到源码

此处不可以直接将 (-00000110)的最高位从0变为1直接去掉符号
变为负数,不是只改变最高位的符号位那么简单

方法1:为得到他的负数求补码
将二进制的(00000110)

变为反码
其他位按位取反(1变成0,0变成1。)
11111001

反码+1得到补码
11111001
加--------1
——————
11111010
这个补码才相当于他的负数

方法2:为得到他的负数求补码
对于00000110
保留最右边的10,其余位全部按位取反
变为11111010

二进制的负数,要为补码,为得到其补码
其实就是要保留最右边的二进制数1后二进制1右边的数字,其他的位按位取反,从而快速的得到补码进行减法运算

10100010 +(-00000110)
变为
10100010 + 11111010

10100010
+11111010
——————
110011100
因为要8位,所以最高位抹去
变为
10011100

例3 求 -1101的补码
方法1
首先将4位的二进制数变为 8位二进制数
-00001101
求反码
11110010
再+1
变为
11110010
加--------1
——————
11110011

方法2
00001101
保留最右边的1,以及1右边的数字
因为最右边的1右边的数字不存在,所以只保留1
其余位按位取反
11110011

例4某题中补码 减1变为反码
10000010 - 1
10000010 - 00000001
10000010 +(-00000001)

-00000001变为补码过程
00000001 反码:11111110
反码+1 为补码:11111111

10000010
+11111111
——————
110000001

最终反码变为: 110000001

### 二进制减法运算规则 二进制减法的基本运算规则与十进制减法类似,但其进位机制基于二进制的“借一当二”原则。具体规则如下: - `0 - 0 = 0` - `1 - 0 = 1` - `1 - 1 = 0` - `0 - 1 = 1`(此时需要向前一位借1,当前位变为1,前一位相当于减1)[^3] 在运算过程中,从右往左逐位进行减法操作。当某一位不够减时,需要向高位借1,借1后当前位的值增加2(因为是二进制),而被借位的高位则减少1。这一过程可能引发连续的借位操作,直到高位非零为止[^3]。 ### 二进制减法运算步骤 以二进制数 `1001`(即十进制的9)减去 `0110`(即十进制的6)为例: ``` 1 0 0 1 - 0 1 1 0 ---------- ``` 运算过程如下: 1. 从最右边的位开始减:`1 - 0 = 1` 2. 第二位:`0 - 1`,此时需要借位,借位后变为 `2 - 1 = 1`,前一位被借位后变为 `0` 3. 第三位:`0 - 1`,再次借位,变成 `2 - 1 = 1`,前一位变为 `0` 4. 第四位:`0 - 0 = 0` 最终结果为 `0011`,即十进制的3。 ### 二进制减法的实现方式 在计算机中,为了简化减法运算,通常采用补码方式将减法转换为加法进行计算。例如,`A - B` 可以转换为 `A + (-B)`,其中 `-B` 是 `B` 的补码表示[^2]。这种方式避免了原码减法中需要比较绝对值大小、判断符号等复杂操作。 ### 示例代码 以下代码演示了如何在 C 语言中使用补码进行二进制减法: ```c #include <stdio.h> int main() { int a = 9; // 二进制 1001 int b = 6; // 二进制 0110 int result = a - b; printf("Result of binary subtraction: %d\n", result); // 输出二进制结果 for (int i = 7; i >= 0; i--) { printf("%d", (result >> i) & 1); } printf("\n"); return 0; } ``` ### 输出结果 ``` Result of binary subtraction: 3 二进制结果为:00000011 ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值