这是我之前回答的问题的后续问题:
Reading characters on a bit level
我似乎遇到的问题是理解C中位操作的基本概念。我理解需要做什么,但我实际上在开发解决方案时遇到了麻烦。
一个例子:
使用逻辑运算符将01101010更改为00111110。
我理解掩码的原理和需要来实现解决方案,但我不明白如何以编程方式进行。
我来自一个基于C#的大量背景,最近才开始用C语言开发。
有人可以给我一些指示或提示来完成这个例子吗?
以下是任何其他人认为有用的解决方案:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h.>
int main()
{
//01101010 - 106 Decimal
char a = 0x6A;
//01010100 - 84 Decimal
char b = 0x54;
//00111110 - Uses exclusive or (XOR)
char c = a ^ b;
//Prints out in Hex - 62 Decimal
printf("%x",c);
return 0;
}
答案 0 :(得分:2)
你可以把它们排在一起。如果其中一个位是1,则两位的XOR为1.
01101010 XOR 00111110 = 01010100
使用此结果对第一个值进行异或运算将为您提供第二个值。
01101010 XOR 01010100 = 00111110
在C:
char a = 0x6A;
char b = 0x3E;
char c = a ^ b;
(c ^ a == a ^ b ^ a) && (a ^ b ^ a == b)
答案 1 :(得分:2)
我会这样做:首先看看哪些位需要改变。如果您只需要将1更改为0,则需要&
。如果您只需要将0更改为1,则需要|
。如果您需要在两个方向上进行更改,例如此处的情况,则需要^
,因为它是唯一可以双向运行的运算符,可以这么说。
现在只需要找到适合xor的位掩码。从1^0=1
和0^0=0
开始,您必须在位掩码中将您不想更改的位设置为0。将其他人设为1(1^1
为0且0^1
为1),您将获得所需的结果。