哪个是设置位的最佳方法,为什么?

问题描述 投票:-1回答:2

如果我必须设置第4位,

哪个是最好的方法

方法1:一个| =(1 << 3)

方法2:| = 8

请详细说明区别。

c++ c++11 bit bitmask
2个回答
2
投票

这两个是等效的。

使用1 << 3对读者来说更清楚了要设置的位。并且由于该表达式是编译时常量,因此编译器通常会在编译时计算该值,因此不会产生运行时开销。


0
投票

您注意到,这两个都做同样的事情。让我专注于与众不同的部分:

  • [(1 << 3)取数字1(二进制:0000 0001)并将其向左移动3个点(二进制:0000 1000)
  • 8取数字8(二进制:0000 1000)

如您所见,结果是相同的二进制数:0000 1000

如果我必须在这2个之间进行选择,我会选择班次,因为更明显的是您想要一点。但是,就我个人而言,创建这些数字时我会选择第三个变体:0b0000'1000

[0b代表二进制文字,自C ++ 14起可用,'是数字分隔符(也为C ++ 14),与我之前使用的空格相似。

但是,公平地讲,我认为您在使用错误的工具时假设a是整数。创建std::bitset来进行这类位操作。 (甚至在C ++ 98中也可用)

std::bitset

程序输出:#include <bitset> #include <iostream> int main(int, char**) { auto a = std::bitset<8>{}; a.set(3 /*zero based indexing*/); std::cout << a.to_string() << std::endl; return 0; }

00001000

如您所见,您可以使用方法Code at Compiler Explorer非常容易地设置位,就好像它是任何其他容器一样。有关更多操作,请参见set

© www.soinside.com 2019 - 2024. All rights reserved.