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

Java按位取反(~)运算结果为负数的原理问题咨询

Java按位取反运算符(~)运算规则说明

核心前置规则

Java中int是32位有符号整数,所有整数以补码形式存储:

  • 最高位为符号位,0代表正数,1代表负数
  • 正数的补码和原码完全一致
  • 负数补码转十进制规则:先减1得到反码,再对除符号位外的所有位取反得到原码,最后转换为十进制值加负号
  • 通用快速计算规律:~n = -(n + 1)

示例1:~15 = -16 运算逻辑

  • 15作为正整数,32位补码为:00000000 00000000 00000000 00001111
  • 按位取反后所有位0转1、1转0,得到补码:11111111 11111111 11111111 11110000
  • 补码转十进制:
    1. 补码减1得到反码:11111111 11111111 11111111 11101111
    2. 除符号位外取反得到原码:10000000 00000000 00000000 00010000
    3. 原码对应十进制值为-16
  • 符合快速计算规律:~15 = -(15+1) = -16

示例2:~6 = -7 运算逻辑

  • 6作为正整数,32位补码为:00000000 00000000 00000000 00000110
  • 按位取反后得到补码:11111111 11111111 11111111 11111001
  • 补码转十进制:
    1. 补码减1得到反码:11111111 11111111 11111111 11111000
    2. 除符号位外取反得到原码:10000000 00000000 00000000 00000111
    3. 原码对应十进制值为-7
  • 符合快速计算规律:~6 = -(6+1) = -7

关于「按位取反结果都是负数」的说明

这个结论只在原操作数为正整数时成立:

  • 正整数补码最高位为0,按位取反后最高位变为1,所以结果为负数
  • 如果原操作数是负数,补码最高位为1,按位取反后最高位变为0,结果就是正数,比如~(-16) = 15、~(-7) = 6,同样符合~n = -(n+1)的计算规律

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:24:02