学了一段时间的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也是可以表示的
看明白了吗?
**