原码、反码、补码的那些事!

学了一段时间的c和js现在才对原码、反码、补码有了一定的认识:
首先得记住一点:

原码、反码、补码各是多少

他们的第一位表示正负
毕竟不知道他是什么也得先记住:

正数

这哥们的反码、补码都等于原码

负数

反码等于第一位不变,其他的位原码是1就变成0,原码是0就变成1
补码就是反码+1

那么问题来了?

为啥就有了反码补码一说呢?
首先我们知道计算机每多做一种运算,我们就得在cpu设置相关的算法,那么人们就想能不能把减法用加法进行运算,那就可以不用设置减法器,先看看反码

0=(-1)+(1)
10000001(原码)+00000001(原码)=10000010=-2
11111110(反码)+00000001(反码)=11111111不等于0
11111111(补码)+00000001(补码)=00000000=0

显而易见,只有补码才能达到预期的效果

那哪个为什么整数的的取值范围是-231~231-1

一个int有4字节32位应该是-(231-1)~231-1 ,为啥就左边可以多一个,好像不公平
首先第一位是符号位,再者0有两个+0和-0
谁便举个例子!
7位本应该是 -63~63
但-64=-63+(-1)=1111111+1000001=1000000=-0
那-64也是可以表示的
看明白了吗?

**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值