Я новичок в C++. В Python 3 можно преобразовать строку «ABC» в выбранные биты, как это и печать, когда пара битов 11:Получить бит из байта и фрагмента 2 битовых пары
s = 'ABC'
for i, char in enumerate(s):
for j in range(4):
if ord(char) >> 2*j & 0b11 == 3:
print(i, char, ord(char), j, ord(char) >> 2*j & 0b11)
Который возвращает:
2 C 67 0 3
Как сделать то же самое в C++; то есть как определить биты 1 и 2 символа «C» равным 11? Сейчас у меня этот код:
//#include <string>
//#include <bitset>
#include <iostream>
//using namespace std;
int main(){
const int bits_in_byte = 8;
std::string s = "ABC";
for (std::size_t i = 0; i < s.size(); ++i)
{
for (int j = 0; j < 4; ++j) {
std::cout << i << ' ' << s[i] << ' ' << std::bitset<bits_in_byte>(s[i]) << std::endl;
}
}
}
который возвращает:
0 A 01000001
0 A 01000001
0 A 01000001
0 A 01000001
1 B 01000010
1 B 01000010
1 B 01000010
1 B 01000010
2 C 01000011
2 C 01000011
2 C 01000011
2 C 01000011
Спасибо! Вы правы, что я получаю предупреждение: & имеет более низкий приоритет, чем ==; == будет оцениваться сначала [-Wparentheses] 'при выполнении' if ((s [i] >> (2 * j)) & 3 == 3) {'как в вашем исходном ответе вместо' if (((s [i] >> (2 * j)) & 3) == 3) {'как в вашем отредактированном ответе. Это смещает 's [i] >> (2 * j)', а затем '& 3' маски. Я понял. Благодаря! –