原码补码反码和位运算

1.原码补码和反码

   规则:正数的原码反码补码都相同,负数的反码是符号位不变也就是永远是1,其他位置取反,
   补码是反码+1的结果
   比如:
   1
   原码:0000 0001
   反码:0000 0001
   补码:0000 0001
   -1
   原码:1000 0001
   反码:1111 1110
   补码:1111 1111

2.位运算

1.与运算(and …&):

在这里插入图片描述
两个开关都为1时灯泡才亮,基于此逻辑为与逻辑

1000 1111
1011 0100
------------与运算
1000 0100
2.或运算(or …|)

在这里插入图片描述
两个开关只要有一个为1,就可以亮此逻辑为或逻辑

1000 1111
1011 0100
------------或运算
1011 1111
3.异或运算(xor …^)

在这里插入图片描述
必须要两个值不一样才能灯泡亮,此逻辑为异或

1000 1111
1011 0100
------------异或运算
0011 1011
4.非运算(not …!)

就是取反操作

1000 1111
----------非运算
0111 0000
5.位运算(移动位)

左移(shl <<):

0000 0001
左移后:
0000 0010
规则:所有二进制位左移一个位置,高位丢弃,低位补零,左边为高位,右边是低位。
可以发现,左移相当于原来的数字乘2.

右移:(>>……shr)

0000 1111 
右移后:
0000 0111
从15变成了7
相当于除二
规则和左移对应相反

2.位运算实现加减乘除

1.加法

假如我们要算5+6=?

// 首先转换5和6使其成为二进制数
5:0000 0101
6:0000 0110
11: 0000 1011
第一步: 进行异或运算,如果没有进位,可以直接得出结果
0000 0101
0000 0110
---------- 异或
0000 0011
第二步:用与运算判断有没有进位,如果结果是0则说明没有进位,即可得出结果
0000 0101
0000 0110
---------- 与运算
0000 0100
第三步:将与运算的结果左移以为,得到进位后的结果
0000 1000
第四步:继续进行异或操作
0000 0011
0000 1000
---------异或
0000 1011
第五步:继续通过与操作判断是否需要进位
0000 0011
0000 1000
---------0000 0000
第六步:结果为0 , 发现不需要进位了,得出结果
结果为 0000 1011
等于十进制的11,结果正确
2.减法

假如计算机要算7-8=?
减法就是加上这个数的相反数

 7: 0000 0111
-8: 1000 1000
-8的反码: 1111 0111
-8的补码: 1111 1000
第一步:7-8的补码进行异或运算
0000 0111
1111 1000
------------异或操作
1111 1111
第二步:判断是否需要进位
0000 0111
1111 1000
------------与操作
0000 0000
第三步:得出结果 ff就是-1 结果正确
3.乘法

所谓乘法,譬如x*y就是x个y相加,实质还是加法

4.除法

所谓除法,就是减法,譬如x/y,就是让z=x-y,一直减到z<0,统计一共减了多少个y,就是结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值