你还在用魔法数做位操作吗现代C让你彻

做位操作的时候常常需要按位与、按位或

、按位取反~和按位异或^,比如把int8_t的第5位位设置为0:

int8_tval=;autor=val0xEF;std::coutr"\n";

这里的0xEF就是一个典型的魔法数,读代码的时候需要想一下这个魔法数的作用是干啥的,在现代C++里,你再也不需要这些魔法数了,一切都变得简单了:

#includebitsetstd::bitset8bits=;bits.set(4,false);std::coutbits.to_ulong()"\n";std::coutbits.to_string()"\n";

有了bitset,要怎么操作这些位就可以随心所欲了。

能不能在编译期去操作这些位呢?

constexprstd::bitset8bits=;bits.set(4,false);

然而bitset的方法都不是constexpr的,所以即使是字面量也无法在编译期去做位操作,因为bitset是在C++11里加进去的,那时候constexpr也是刚刚进入C++11,在年有个提案就是要将bitsetconstexpr化,预计会在C++23中支持,到时候就可以在编译期做这些位操作了。在这之前如果想在编译期做位操作的话可以使用这个库bitset2(


转载请注明:http://www.aierlanlan.com/rzdk/508.html