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

十进制下按位取反运算符~作用于12为何得到结果-13

按位取反运算符~的计算逻辑说明

错误原因

  • 仅对数值的有效二进制位做了翻转,未考虑整数存储的所有高位(包括符号位)都会参与运算
  • 忽略了编程语言中默认整数为有符号补码类型,负数的二进制值不能直接按无符号规则换算

正确运算步骤(以常用的32位有符号int为例)

  1. 十进制12的32位补码表示:正数的补码与原码一致,为 00000000 00000000 00000000 00001100
  2. 执行按位取反操作,所有二进制位0变1、1变0,得到结果的补码:11111111 11111111 11111111 11110011
  3. 将补码转换为十进制值:
    • 最高位为1,代表这是负数的补码
    • 负数补码转原码规则:补码减1得到反码,反码除符号位外逐位翻转得到原码
    • 上述补码减1得 11111111 11111111 11111111 11110010
    • 除符号位逐位翻转后得到原码 10000000 00000000 00000000 00001101,对应十进制值为-13

快速计算规律

对于任意有符号整数n,按位取反的结果恒满足公式:
~n = -(n + 1)
代入数值12可直接算出结果为-(12 + 1) = -13。

补充说明

如果使用无符号整数类型,按位取反的结果为所有位翻转后的无符号值,不会出现负数,例如8位无符号整数12取反的结果为243。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:48:02