首页 > 解决方案 > C语言中带括号和不带括号的异或有什么区别

问题描述

我有一些代码,它通过 XOR 对 5 个第一个数字检查校验和,它应该等于第六个数字。但是,两者有什么区别

if (n0^n1^n2^n3^n4==n5)  return true;
    else return false;

if ((n0^n1^n2^n3^n4)==n5)  return true;
    else return false;

?

因为第一个有效,第二个无效。

标签: c

解决方案


C 语法建立运算符优先级,==其优先级高于^. Son0^n1^n2^n3^n4==n5等价于n0^n1^n2^n3^(n4==n5),与 不同(n0^n1^n2^n3^n4)==n5

这被 Kernighan 和 Ritchie 等人认为是 C 语言设计中的一个错误,这是由于其发展历史而发生的。


推荐阅读