Java中~符号运算原理

~属于位运算(与或非中的非运算),其计算原理如下:

首先要先知道什么是源码、补码、反码

计算机在存储int类型数据的时候是固定大小的4字节32位二进制存储形式(最高位代表正负,剩余代代表数字大小,所以int的范围是-2^31 – (2^31 - 1))。例如数字7,其在计算机内部存储的二进制码为:

00000000 00000000 00000000 00000111

这个二进制码被称为源码。顾名思义,反码即源码反转,即:

11111111 11111111 11111111 11111000

而补码的含义对正数、负数的含义不是一样的:
正数的补码是其本身源码
负数的补码转换如下:首先我们需要得到其对应正数源码的反码,然后将反码的位数加一。位数加一的具体例子:
如二进制0010,位数加一变成0011
如二进制0011,位数加一变成0100
如二进制0101,位数加一变成0110
如二进制0111,位数加一变成1000

然后我们来看~到底是怎么计算的。

例如对于数字7,其二进制如上所述。我们需要做的是得到其反码,如上所述,最高位代表正负号:0为正,1为负。然后我们保持最高位不变,将反码再求其反码,即:

10000000 00000000 00000000 00000111

然后剩下的步骤与求补码有些许类似:将上面的二进制进行位数加一,变成:

10000000 00000000 00000000 00001000

这个结果就是~7的答案的二进制代码,即-8
事实上int类型的数字的~运算可以由以下方法计算:

(- i) - 1

i 代表的是任意整数

欢迎批评指正~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值