JAVA 之原码 反码 补码及取反运算符~

一 原码 反码 补码

在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 。

                                                                     ↓此处注意! 符号位保持不变

                                                         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值