如果我必须设置第4位,
哪个是最好的方法
方法1:一个| =(1 << 3)
方法2:| = 8
请详细说明区别。
这两个是等效的。
使用1 << 3
对读者来说更清楚了要设置的位。并且由于该表达式是编译时常量,因此编译器通常会在编译时计算该值,因此不会产生运行时开销。
您注意到,这两个都做同样的事情。让我专注于与众不同的部分:
如您所见,结果是相同的二进制数: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
。