【发布时间】:2010-10-24 15:34:19
【问题描述】:
& 有 &&。 | 有 ||。为什么^ 没有^^?
我知道它不会短路,但它会有不同的语义。在 C 中,true 实际上是任何非零值。按位异或并不总是与逻辑异或相同:
int a=strcmp(str1,str2);// evaluates to 1, which is "true"
int b=strcmp(str1,str3);// evaluates to 2, which is also "true"
int c=a ^^ b; // this would be false, since true ^ true = false
int d=a ^ b; //oops, this is true again, it is 3 (^ is bitwise)
既然您不能总是依赖1 或-1 这样的真值,那么^^ 运算符不是很有帮助吗?我经常不得不做这样奇怪的事情:
if(!!a ^ !!b) // looks strange
【问题讨论】:
-
因为它看起来太幸福了。 ^_^ C++ 是关于痛苦的!优化!优化! (免责声明:这是一个笑话。不要当真。)
-
我很感兴趣但很困惑……逻辑异或 a^^b 要求在 a 中设置的所有位都在 b 中未设置,在 b 中设置的所有位在 a 中都未设置?跨度>
-
这不是一个反问句。难道原c/c++语言的创造者不需要回复才能真正回答这个问题吗?
-
@Terry:我想这有点夸张,因为 C 不会突然添加 ^^ 运算符,但我对此很好奇,我正在设计一种编程语言。我想知道我是否应该包括它。现在,其中有一个 ^^ 运算符,但如果有人给出一个很好的理由反对它,我会删除它。
-
@Zifre:我编辑了你的问题,让人们更清楚为什么你可能想要这样做。如果您不喜欢我的更改,请随时恢复。我会在评论中提出建议,但 cmets 中没有格式。希望这会有所帮助。
标签: c++ c operators language-design xor