做位操作的时候常常需要按位与、按位或
、按位取反~和按位异或^,比如把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(