我是这样写的:
#include <iostream>
#include <vector>
int main()
{
std::vector<char> v = {0, 0, 0};
v[0] = v[0] == 0 ? 1 : 0;
v[1] = !v[1];
v[2] ^= 1;
std::cout << (int)v[0] << (int)v[1] << (int)v[2] << "\n";
return 0;
}
它切换所有位,但我实际上只关心更改第 i 个位。
我感兴趣的是在 c++ 中应该使用这些方法中的哪一种?项目,当您唯一关心的是速度(而不是内存和可读性)时?
使用std::vector<char>
的原因作为一个位集是 in my timings I found that it's faster than a vector of int
s or char
s, and std::bitset
.
最佳答案
只要您对位感兴趣,您可以改用 std::bitset
或直接使用 bool 而非 char 的 vector :
#include <iostream>
#include <vector>
int main()
{
std::vector<bool> v = { 0, 0, 0 };
for (int i(0); i < v.size(); i++)
v[i] = !v[i];
for (int i(0); i < v.size(); i++)
std::cout << (int)v[i];
std::cout << std::endl;
std::cin.get();
return 0;
}
- 推荐使用
按位非 !
,因为它速度快且干净。
关于c++ - 切换表示为字符的位的 3 种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40818748/