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

负整数位运算疑问:(-15) & (-1 >> 1)为何返回-15?

问题解惑:为什么(-15) & (-1 >> 1)结果是-15?

核心原因是Java中负数的右移操作是算术右移,不是你以为的逻辑右移,具体拆解如下:

  • 先看-1的二进制:Java的int是32位有符号数,-1的二进制是全1:11111111 11111111 11111111 11111111。
  • 执行-1 >> 1:这是算术右移,规则是符号位保持不变,左侧补符号位(即补1),所以移位后结果还是全1的二进制,对应十进制依然是-1,而不是你想的01111111...。
  • 最后执行(-15) & (-1):按位与操作中,任何数和全1的二进制按位与,结果都是它本身,所以-15 & -1的结果就是-15。

如果要得到你预期的“最高有效位置0”的掩码,需要用逻辑右移运算符>>>,它不管正负,左侧一律补0。比如-1 >>> 1的结果是2147483647(二进制01111111 11111111 11111111 11111111),这时(-15) & (-1 >>>1)的结果才是15(因为把-15的符号位清零了)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:17:05