【问题标题】:Check bit or use boolean?检查位还是使用布尔值?
【发布时间】:2012-05-17 09:11:49
【问题描述】:

我在二维平面 (x,y) 中得到一个点作为输入。现在我必须检查它在哪个象限,做一些关于 X 轴和 Y 轴的反射,并多次重复检查它在哪个象限。

我有两种方法,但不确定哪个更好

  1. 我最初可以将 x,y 存储为布尔值,然后在反射时进行布尔运算,因此这很容易。要判断该点在哪个象限,只需检查该值是真还是假。
  2. 或者我可以使用 int 进行常规方法,然后检查第一位以找到该点所在的象限

【问题讨论】:

    标签: c++ optimization


    【解决方案1】:

    也不行,只需将您的坐标与0 进行比较即可。

    如果您将它们存储为布尔值,除了丢失信息之外,您可能还会因为转换而获得一些开销。

    如果您检查第一位,它的可读性会降低。

    编译器会自行优化这些调用,怀疑你会从不同的方法中获得什么。

    【讨论】:

    • 我认为与 0 进行比较比比较单个位或检查 bool 的值需要更多时间
    • 不,取决于编译器是否只检查第一位与 0 进行比较
    • @nischayn22 编译器非常擅长做这种微优化。另外,请注意,理论上检查 bool 可能比检查 int 慢,因为它需要提升为 word-size。在编写代码时以可读性为目标,并且只有在分析之后才能进行此类更改。
    • 哦,检查 bool 可能会更慢,那么我们应该始终将值存储在 int 中并检查该位吗?您还可以解释一下我应该如何反映坐标(对于 bool,我所做的只是 y=!y)?
    • 对于 int 它将是 y = -y;
    猜你喜欢
    • 2020-12-31
    • 1970-01-01
    • 2011-06-02
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 2021-11-23
    • 2017-01-22
    相关资源
    最近更新 更多