C中的逻辑运算符有什么意义?

reu*_*mut 5 c xor bitwise-operators logical-operators

我只是想知道C中是否有一个XOR逻辑运算符(类似于&&表示AND,但是对于XOR).我知道我可以将XOR分成AND,NOT和OR,但简单的XOR会好得多.然后我想到如果我在两个条件之间使用普通的XOR位运算符,它可能会起作用.对于我的测试,它做到了.

考虑:

int i = 3;
int j = 7;
int k = 8;
Run Code Online (Sandbox Code Playgroud)

仅仅为了这个相当愚蠢的例子,如果我需要k大于i或大于j而不是两者,XOR将是非常方便的.

if ((k > i) XOR (k > j))
   printf("Valid");
else
   printf("Invalid");
Run Code Online (Sandbox Code Playgroud)

要么

printf("%s",((k > i) XOR (k > j)) ? "Valid" : "Invalid");
Run Code Online (Sandbox Code Playgroud)

我把按位XOR ^,它产生"无效".将两个比较的结果放在两个整数中导致2个整数包含1,因此XOR产生错误.然后我用&和|尝试了 按位运算符和两者都给出了预期的结果.知道真实条件具有非零值,而虚假条件具有零值,所有这些都是有意义的.

我想知道,是否有理由使用逻辑&&和|| 当按位运算符&,| 和^工作一样吗?

Mic*_*uen 13

你不需要逻辑XOR,我已经忘记了SO问题,但它与你的想法类似,基本上我们不需要XOR,它相当于!=无论如何

FALSE XOR FALSE == FALSE
FALSE XOR TRUE == TRUE
TRUE XOR FALSE == TRUE
TRUE XOR TRUE == FALSE


FALSE != FALSE == FALSE
FALSE != TRUE == TRUE
TRUE != FALSE == TRUE
TRUE != TRUE == FALSE
Run Code Online (Sandbox Code Playgroud)

我会搜索我的收藏夹,然后在此处粘贴链接...

  • 当在*boolean*值上使用时,`&`,`|`和`^`可能与`||'和`&&`的作用相同,但通常你不使用`&`,`|`和`在布尔值上使用它们 - 你使用它们来处理比特(因此它们为*bitwise*运算符).适当使用时,按位运算符与逻辑运算符不同. (2认同)

小智 11

按位运算符与&&和||"不一样" 运营商.首先,&&和|| 执行短路评估,而按位运算符则不执行.换句话说,你不能用bitwise运算符做这样的事情:

int * p = 0;
(p != 0) && (*p = 1);
Run Code Online (Sandbox Code Playgroud)

因为如果你说:

(p != 0) & (*p = 1);
Run Code Online (Sandbox Code Playgroud)

将评估两个子表达式,并且您将取消引用空指针.

  • @reubensammut:如果依赖于短路,你将得不到同样的结果.`if(returnsTrue()|| explodesWorld())`不会破坏世界,而`if(returnsTrue()| explodesWorld())`会. (12认同)