【问题标题】:How to use logical XOR operator in macro? NOT how to defined XOR operator by macro [duplicate]如何在宏中使用逻辑异或运算符?不是如何通过宏定义 XOR 运算符 [重复]
【发布时间】:2017-07-13 15:59:49
【问题描述】:

在 C、C++、Objective-C 的宏中使用逻辑异或运算符 ^^ 有什么技巧吗?

我试过直接在Objective-C中应用^^,它不起作用。

已编辑:让我澄清一下我的答案。

我想要的是在宏中使用异或运算符。并不是说“如何通过宏定义异或运算符。

也就是说,我想要类似的东西

#if defined(x) ^^ TARGET_OS_IOS ^^ __cplusplus

【问题讨论】:

  • C 或 C++ 中没有逻辑异或运算符
  • != 怎么样?
  • 只要掌握最低限度的 C 编程知识,您就可以在不到 10 秒的时间内自己编写这样的运算符。 #define XOR(a,b) ( ((a)!=0) ^ ((b)!=0) ).
  • @Lundin:我的问题是使用逻辑异或操作 IN MACRO。我也想通过多个文件使用它。用你的解决方案,我必须包含包含那个宏的头文件,当然效率不高
  • @tranvansang 宏由预处理器评估,使其非常高效。但是您没有 将其实现为宏,您可以简单地在代码中的任何位置使用((a)!=0) ^ ((b)!=0)。它产生完全相同的机器代码。

标签: c++ objective-c c macros logical-operators


【解决方案1】:

在发布问题后的几秒钟内,我自己想出了答案。

!(A) != !(B) 将等价于异或运算符

如果操作数的数量不同于 2,则更好的解决方案

!(A) ^ !(B) ^ !(C) ^ ...

【讨论】:

  • 您可以删除 !变量A != B 的前面也应该完成这项工作
  • @Aeonos 如果AB 是除bool 之外的整数类型,则! 是必需的。考虑A=1; B=2
猜你喜欢
  • 1970-01-01
  • 2012-11-22
  • 1970-01-01
  • 2018-09-16
  • 2015-02-11
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 2020-01-23
相关资源
最近更新 更多