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

如何在C语言中用~和|实现符合要求的bitwise XNOR函数?

位运算XNOR函数实现问题解决

问题背景

需要实现一个按位XNOR函数,限制最多使用7个~和|运算符,不能使用&运算符。示例:bitXnor(6, -5)应返回2。

现有代码:

int bitXnor(int x, int y) {
  return ~(~x | ~y);
}

测试失败案例:

ERROR: Test bitXnor(-2147483648[0x80000000],-2147483648[0x80000000]) failed...
...Gives -2147483648[0x80000000]. Should be -1[0xffffffff]

问题原因

现有代码~(~x | ~y)本质是按位与(x & y),并非XNOR。在32位有符号整数中,当输入为0x80000000(最小负整数)时:

  • ~x结果为0x7fffffff(最大正整数)
  • ~x | ~y结果为0x7fffffff
  • 再次取反得到0x80000000,与预期的全1(-1)不符。

解决方案

利用按位异或(XOR)的等价转换:x ^ y = ~(x | ~y) | ~(~x | y),而XNOR是XOR的取反,因此可以得到符合要求的实现:

int bitXnor(int x, int y) {
  return ~( ~(x | ~y) | ~(~x | y) );
}

运算符计数验证

  • ~运算符:4次
  • |运算符:3次
    总计7个运算符,满足限制条件。

测试验证

  • 输入0x80000000和0x80000000:
    1. x | ~y = 0x80000000 | 0x7fffffff = 0xffffffff,取反后为0
    2. ~x | y = 0x7fffffff | 0x80000000 = 0xffffffff,取反后为0
    3. 两者按位或为0,取反后得到0xffffffff(即-1),符合预期。
  • 输入6和-5:最终返回2,与示例一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:46:22