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

求满足指定位运算条件的x值,及x=12、x=-1时的运算疑问

位运算问题解答

一、求满足条件的x取值

已知两个条件:

  1. s = x >> 31(32位有符号数的算术右移)
  2. x = (s & ~x) | (~s & x)

先分析第二个等式:(s & ~x) | (~s & x) 等价于 s ^ x(异或运算的定义:对应位不同则为1,相同则为0)。因此等式可简化为:
x = s ^ x

对等式两边同时异或x,得到:
0 = s

结合第一个条件s = x >> 31,32位有符号数的算术右移规则为:

  • 非负数(x ≥ 0)右移31位,结果为0
  • 负数(x < 0)右移31位,结果为-1(二进制全1)

因此s=0意味着x必须是32位有符号非负整数,即取值范围为 0 ≤ x ≤ 2^31 - 1。

二、疑问解答

1. x=12时的运算结果判断

32位环境下x=12的二进制为0000 0000 0000 0000 0000 0000 0000 1100,执行s = x >>31后,s=0。代入等式:
(s & ~x) | (~s & x) = (0 & ~12) | (0xFFFFFFFF & 12) = 0 | 12 = 12
与原x值相等,因此该判断正确。

2. x=-1时的相关判断

32位有符号数中,x=-1的二进制为1111 1111 1111 1111 1111 1111 1111 1111:

  • x >>31是算术右移,负数右移高位补1,结果为1111 1111 1111 1111 1111 1111 1111 1111,对应十进制的-1,不是1,所以你的判断错误。
  • 此时s=-1(二进制全1),~x为0000 0000 0000 0000 0000 0000 0000 0000,所以s & ~x = 0xFFFFFFFF & 0x00000000 = 0;
  • ~s为0000 0000 0000 0000 0000 0000 0000 0000,所以~s & x = 0x00000000 & 0xFFFFFFFF = 0;
  • 最终(s & ~x) | (~s & x) = 0 | 0 = 0,与x=-1不相等,符合之前的结论(负数不满足条件)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:46:05