一 原码 反码 补码
在Java中,数据以补码形式来存放并操作。
>原码:数据对应的二进制形式就是这个数据的原码。
原码首位数字为符号位,0为正,1为负。
/*为什么要引入反码和补码?
原码的加减法得出结果和十进制原数的结果不一样,为此,引入入了反码和补码。若两个补码的和等于另一个补码,那么这三个补码对应额原码的十进制形式的和式仍然成立
*/
>反码:在源码的基础上,符号位不变。正数,反码等于原码;负数,除了符号位,其他位取反
>补码:正数,等于原码;负数,反码加一
补码的本质:
要将正数转成对应的负数,只要用0减去这个数就可以了。比如,-8其实就是0-8。
已知8的二进制是00001000,-8就可以用下面的式子求出:
00000000
-00001000
——————————
因为0000 0000(被减数)小于0000 1000(减数)。不够减,问上一位借1就可以了。
也就是说,被减数其实是1 0000 0000,算式也就改写成:
1 0000 0000
— 0000 1000
——————————————
1111 1000 --------->这就是 -8 的补码
二、取反运算符~
java中按位取反 ~5=-6。
原因:
5的二进制原码是:0000 0101,
取反之后是: 1111 1010
得到的这个值被认为是在计算机中存储的补码,而要把这个结果显示出来,须进行转为原码的操作。 原码 = 取反【补码 -1】
所以 1111 1010 - 1 = 1111 1001, 然后再对 1111 1001 取反,得到 1000 0110,即 -6 。
↓此处注意! 符号位保持不变