~属于位运算(与或非中的非运算),其计算原理如下:
首先要先知道什么是源码、补码、反码
计算机在存储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 代表的是任意整数
欢迎批评指正~