java - Xor 从有效位开始

标签 java bit-manipulation xor bit

int a= 21;//10101
int b = 269;//100001101

a^b 就可以了

    10101
100001101
---------
100011000

但我想做

10101
100001101
---------
001011101

有什么办法可以做到不改变原来的数字吗?

最佳答案

您可以移动 a 使其与左侧的 b 对齐。下面的示例代码适用于您的示例,但不能正确处理溢出等。不过它应该为您提供一个起点。

int a = 21;
int b = 269;

int shift = Integer.numberOfLeadingZeros(a) - Integer.numberOfLeadingZeros(b);

int c = (a << shift) ^ b;
System.out.println(Integer.toBinaryString(c)); // 1011101

关于java - Xor 从有效位开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22540607/

相关文章:

java - Dagger 2 不初始化变量

java - 我可以在 Jxls 2+ 中的模板和输出格式中使用 .XLSX 吗?

java - 在 int 类型中设置 4 位半字节

c - ~x + ~y == ~(x + y) 总是假的?

php - PHP 和 JavaScript 中具有 2 个值的十六进制 XOR

java - 将 EBNF 文法转换为上下文无关文法

java - 使用 JFreeChart 创建正态分布图

c++ - 如何为具有 bool 参数的位运算符启用 C++ 警告

java - java引用之间的异或操作

python - 多层感知器异或,绘制误差(损失)图,收敛太快?