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)
我会搜索我的收藏夹,然后在此处粘贴链接...
小智 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)
将评估两个子表达式,并且您将取消引用空指针.
| 归档时间: |
|
| 查看次数: |
839 次 |
| 最近记录: |