java 取非运算 ~2 = -3 计算过程

java 的int类型 32位说明 

一、非运算

      取反运算,在二进制中 1变0 ,0变1

例:       1 0 1 0 1 0 1 0     取非

               0 1 0 1 0 1 0 1

二、我们需要知道 在计算机中正、负数二进制是如何存储的

   1、最高位 0表示整数 ,1表示负数

    例如  

             0000 0000  0000 0000  0000 0000  0000 0010 表示 2

             1000 0000  0000 0000  0000 0000  0000 0010 表示 -2

   2、反码

        正数反码 = 正数原码

        负数反码 =  负数原码除最高位外各位取反  

    例如 

       -2 原码 :1000 0000  0000 0000  0000 0000  0000 0010

       -2反码:  1111  1111   1111 1111 1111  1111   1111  1101

  3、补码

        正数补码 = 正数原码

        负数补码 = 负数反码 + 1

      例如

        -2原码 1000 0000  0000 0000  0000 0000  0000 0010      

        -2反码 1111  1111   1111 1111   1111  1111   1111  1101      +1

       -2补码  1111  1111  1111  1111   1111  1111   1111  1110

    4、负数是以补码的形式存储的

三、上面的准备知识了解后,~2 的结果说明

     2的 二进制表示   :0000 0000  0000 0000  0000 0000  0000 0010    取反

     ~2的二进制表示  :1111 1111  1111   1111   1111  1111  1111  1101

转换后 我们现在只需要计算 1111 1111  1111   1111   1111  1111  1111  1101 二进制再转换成十进制就是我们的~2的结果了。

主要注意:

1、反码 和 非运算(~)  是不同的两个操作

     反码    :数的最高位符号位是不会变的

     非运算:数的最高位符号位是会变的

2、负数的补码 = 负数反码 + 1

     负数反码 = 负数原码除符号位取反

3、所有 1111 1111  1111   1111   1111  1111  1111  1101 的十进制值

   a、首先判断 符号位 1  是负数

   b、这个二进制表示 负数的补码

   c、根据负数的补码 得到 负数原码 

      负数补码 : 1111  1111  1111   1111  1111     1111  1111  1101     - 1

     负数反码 :  1111  1111  1111   1111   1111    1111  1111  1100

     负数原码:   1000 0000  0000  0000  0000  0000 0000  0011     原码转化成 十进制   -3

至此 得出 ~2 = -3

试一试:~(-3) = 2

    

    

     

     

        

     

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值