如何用C语言位运算实现对应位相等时返回1的功能?
实现对应位相等时结果位为1的位运算
你的需求是让两个数的对应位相等时,结果的该位为1,不等则为0。可以利用**异或(XOR)**的特性来实现简洁的位运算方案:
- 异或运算
x ^ y的规则是:对应位不同时结果为1,相同时为0,正好和你的需求逻辑相反。 - 对异或结果取反
~(x ^ y),就能得到对应位相同时为1、不同时为0的结果。注意要使用无符号整数类型,避免带符号数取反时符号位干扰结果。
用你的示例验证:
x = 251(二进制
11111011),y = 18(二进制00010010)
x ^ y = 二进制11101001,取反后得到00010110,也就是十进制22,和你给出的结果r完全一致。
简洁的C语言实现代码
#include <stdio.h> unsigned char equal_bits(unsigned char x, unsigned char y) { return ~(x ^ y); } int main() { unsigned char x = 251; unsigned char y = 18; unsigned char r = equal_bits(x, y); printf("x: %d (二进制 11111011)\ny: %d (二进制 00010010)\nr: %d (二进制 00010110)\n", x, y, r); return 0; }
注意事项
- 若使用带符号整数(如
char而非unsigned char),取反操作会翻转符号位,导致结果不符合预期,位运算场景优先用无符号类型。 - 如需处理更大的整数类型(如
unsigned int、unsigned long),只需修改函数的参数和返回值类型,核心逻辑保持不变。
内容的提问来源于stack exchange,提问作者affluentbarnburner
相关产品推荐
相关产品推荐

