Jef*_*rth 11 bit-manipulation language-design
在我的脑海中,我无法想到我使用过的具有逻辑异或操作符的单一语言,但它们都具有逻辑和按位and以及or运算符.
环顾四周,我能找到的唯一原因是独占或不能短路,所以逻辑版本将是无用的,我真的看不到这种情况.之所以引起我的注意,大多数语言缺乏这个是我需要它(我使用Ruby,所以我写了一个方法将一个整数转换为一个布尔值,然后使用按位XOR,这在布尔行为就像逻辑XOR) .
仅使用按位XOR也不起作用,因为它会产生不同的结果.
0b0001 ^ 0b1000 = 0b1001 (True)
0b0001 XOR 0b1000 = False
// Where ^ is bitwise exclusive or and XOR is logical exclusive or
// Using != (not equal to) also doesn't work
0b0001 != 0b1000 = True
Run Code Online (Sandbox Code Playgroud)
那么为什么大多数语言都不包含逻辑独占或运算符?
编辑:我添加了一个例子,!=它也不能做我想要的,它几乎可以,但是遇到了同样的问题,使用按位独占或它,它只有你知道你正在使用零或一个,而不是任何其他数字.
需要注意的是,这假设语言使用零作为false,非零作为true.
Jer*_*fin 19
几乎每种语言都有逻辑异或.他们使用的符号各不相同,但无论符号如何,大多数人都认为它"不相等".
编辑:对于那些怀疑的人,测试三个变量的代码:
#include <iostream>
int main() {
for (int i=0; i<2; i++)
for (int j=0; j<2; j++)
for (int k=0; k<2; k++) {
std::cout << "\n!=" << (i!=j!=k);
std::cout << "\t^ " << (i^j^k);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你对"逻辑异或运算符"是什么意思?我不确定你对你的例子有什么期望,但这是我的答案:
a (logical XOR) b 是相同的 bool(a) != bool(b)
不等式是逻辑异或.由于您已经具有按位XOR版本,因此您不需要逻辑版本的特殊运算符.
您也可以编写!a ^ !b以获得与逻辑xor相同的效果.
您可能在编程语言中找不到逻辑xor,因为:
好的,所以您正在寻找字节级异或与位级异或。似乎您正在寻找对字节进行“开”或“关”操作的东西,就像认为字节是“0”或“非零”一样,然后对它们进行异或。听起来确实像是您希望将每个字节压缩为指示真或假的单个位。所以,听起来你想要 (a!=0)^(b!=0)
aba 你的或 ba!=0 b!=0 (a!=0)^(b!=0) 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 1 0 1 7 0 1 1 0 1 0 7 1 0 1 1 3 7 0 1 1 0 7 3 0 1 1 0 7 7 0 1 1 0
至于为什么不是每种语言都如此……我无法真正回答。然而,使用每种语言中可用的按位异或构建块来实现并不是那么困难,并且没有一种语言提供所有可能的功能 - 它们只是提供足够的功能来让您构建可能需要的扩展功能。哦,如果这是一个足够流行的问题,您会期望看到到处都是它的库或宏;虽然我可能没有对此类库/代码进行足够的搜索,但我自己没有找到任何库/代码,这表明该要求要么编写起来很简单,要么是一个利基要求。