C ++ Новичок относительно битовых операций со строками - PullRequest
2 голосов
/ 27 июля 2011

В настоящее время я изучаю набор битов, и в одном параграфе говорится об их взаимодействии со строками:

"Соглашения о нумерации строк и наборов битов обратно пропорциональны: самый правый символ в строке - тот, который имеет самый высокий индекс - используется для инициализации младшего бита в наборе битов - бит с индекс 0. "

однако позже они дают пример + диаграмму, которая показывает что-то вроде этого:

string str("1111111000000011001101");
bitset<32> bitvec5(str, 5, 4); // 4 bits starting at str[5], 1100

значение str:
1 1 1 1 1 (1 1 0 0) 0 0 0 ...

значение bitvec5:
... 0 0 0 0 0 0 0 (1 1 0 0)

В этом примере показано, что он берет самый правый бит и помещает его так, чтобы последний элемент из строки был последним в наборе битов, а не первым.

Что правильно? (Или оба неверны?)

Ответы [ 2 ]

3 голосов
/ 27 июля 2011

Они оба правы.

Традиционно биты в машинном слове нумеруются справа налево, поэтому младший бит (бит 0) находится справа, как и в строке.

Битсет выглядит так

...1100   value
...3210   bit numbers

и строка, которая выглядит одинаково

"1100"

будет иметь string[0] == '1' и string[3] == '0', полная противоположность!

0 голосов
/ 27 июля 2011
string strval("1100");        //1100, so from rightmost to leftmost : 0 0 1 1
bitset<32> bitvec4(strval);   //bitvec4 is 0 0 1 1 

Таким образом, все, что вы читаете, является правильным (и текст, и пример):

самый правый символ в строке - тот, который имеет самый высокий индекс - используется для инициализациимладший бит в битах - бит с индексом 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...