c++中的特殊掩码操作
Special masking operation in c++
我需要使用 C++ 对变量中的每一位进行异或操作
让我们考虑 4 位值 a 和 x,它们的位表示为 a = a3a2a1a0
和 x = x3x2x1x0
。
我们将掩码操作定义为“.”。作为 a.x = a3x3(xor)a2x2(xor)a1x1(xor)a0x0
。
我执行了 a&x 并找到了 a3x3 a2x2 a1x1 a0x0
现在我需要对它们进行异或运算,但是怎么做呢?有什么特别的方法吗?像'&'操作?我搜索了但没有找到任何东西..任何帮助将不胜感激!
根据你的描述,你最终得到的结果不是0就是1,因为你完成了与运算,你需要计算与运算结果的二进制表示中有多少个1: a&x.
你需要做的就是将位一位一位的移位并计算1,如果最后的结果是奇数那么最后的结果就是1,如果是偶数那么最后的结果就是0。
您需要移位 "a and x" 以对所有位进行异或运算。
类似于:
uint32_t a = 0xa;
uint32_t x = 0xb;
uint32_t tmp = a & x; // Bitwise AND of a and x
uint32_t res = 0;
for (int i = 0; i < 32; ++i)
{
res = res ^ (0x1 & tmp); // Only include LSB of tmp in the XOR
tmp = tmp >> 1; // Shift tmp to get a new LSB
}
cout << "Result: " << res << endl;
替代解决方案可以是:
uint32_t a = 0xa;
uint32_t x = 0xb;
uint32_t tmp = a & x; // Bitwise AND of a and x
uint32_t res = 0;
while (tmp > 0)
{
if ((tmp % 2) == 1) res = (res + 1) & 0x1; // XOR operation
tmp = tmp/2; // Shift operation
}
cout << "Result: " << res << endl;
我需要使用 C++ 对变量中的每一位进行异或操作
让我们考虑 4 位值 a 和 x,它们的位表示为 a = a3a2a1a0
和 x = x3x2x1x0
。
我们将掩码操作定义为“.”。作为 a.x = a3x3(xor)a2x2(xor)a1x1(xor)a0x0
。
我执行了 a&x 并找到了 a3x3 a2x2 a1x1 a0x0
现在我需要对它们进行异或运算,但是怎么做呢?有什么特别的方法吗?像'&'操作?我搜索了但没有找到任何东西..任何帮助将不胜感激!
根据你的描述,你最终得到的结果不是0就是1,因为你完成了与运算,你需要计算与运算结果的二进制表示中有多少个1: a&x.
你需要做的就是将位一位一位的移位并计算1,如果最后的结果是奇数那么最后的结果就是1,如果是偶数那么最后的结果就是0。
您需要移位 "a and x" 以对所有位进行异或运算。
类似于:
uint32_t a = 0xa;
uint32_t x = 0xb;
uint32_t tmp = a & x; // Bitwise AND of a and x
uint32_t res = 0;
for (int i = 0; i < 32; ++i)
{
res = res ^ (0x1 & tmp); // Only include LSB of tmp in the XOR
tmp = tmp >> 1; // Shift tmp to get a new LSB
}
cout << "Result: " << res << endl;
替代解决方案可以是:
uint32_t a = 0xa;
uint32_t x = 0xb;
uint32_t tmp = a & x; // Bitwise AND of a and x
uint32_t res = 0;
while (tmp > 0)
{
if ((tmp % 2) == 1) res = (res + 1) & 0x1; // XOR operation
tmp = tmp/2; // Shift operation
}
cout << "Result: " << res << endl;