You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询(-4)的按位取反结果(即~(-4))及Java中负数按位取反方法

Java中负数的按位取反详解

嘿,刚上手Java的话,按位取反操作确实容易搞懵,我来一步步给你讲明白~

先看~(-4)的结果

在Java里,所有整数都是以补码形式存储的,我们先拆解-4的补码计算过程(以32位int为例):

  1. 先看正数4的二进制原码:00000000 00000000 00000000 00000100
  2. 负数的补码是其绝对值的原码按位取反后加1:
    • 4的原码按位取反:11111111 11111111 11111111 11111011
    • 加1后得到-4的补码:11111111 11111111 11111111 11111100
  3. 对这个补码执行按位取反~,每一位0变1、1变0,得到:00000000 00000000 00000000 00000011
  4. 这个二进制对应的十进制就是3,所以~(-4) = 3

任意负数的按位取反方法

其实不管是正数还是负数,按位取反都有个通用的公式:~n = -n - 1,针对负数我们可以用更直观的方式理解:

  • 假设负数是-k(k是正整数),代入公式可得:~(-k) = -(-k) -1 = k -1
  • 换句话说,一个负数的按位取反结果,就是它的绝对值减1

举几个例子验证下:

  • ~(-5) = 5-1=4(实际计算结果确实为4)
  • ~(-1) =1-1=0(没错,~(-1)的结果就是0)
  • ~(-100)=100-1=99(你可以用补码方式自行验算)

如果想手动计算任意负数的按位取反,步骤和-4的例子一致:

  1. 写出该负数绝对值的32位二进制原码
  2. 对原码按位取反,再加1得到该负数的补码(即内存中存储的形式)
  3. 对补码再次按位取反,将得到的二进制数转成十进制就是最终结果

内容的提问来源于stack exchange,提问作者rishabh gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:37:56