Por que std :: bitset expõe bits de maneira little-endian?

Quando eu usostd::bitset<N>::bitset( unsigned long long ) isso constrói um conjunto de bits e quando eu acessá-lo através dooperator[], os bits parecem ser ordenados da maneira little-endian. Exemplo:

std::bitset<4> b(3ULL);
std::cout << b[0] << b[1] << b[2] << b[3];

impressões1100 ao invés de0011 ou seja, o final (ou LSB) está no pequeno endereço (inferior), índice 0.

Olhando para o padrão, diz

inicializando as primeiras posições de bits M nos valores de bits correspondentes emval

Os programadores pensam naturalmente nos dígitos binários de LSB para MSB (da direita para a esquerda). Então oprimeiras posições de bit M é compreensivelmente LSB → MSB, então o bit 0 estaria emb[0].

No entanto, sob mudança, a definição segue

O valor deE1 <<E2 éE1 deslocado para a esquerdaE2 posições de bit; bits desocupados são preenchidos com zero.

Aqui é preciso interpretar os bits emE1 como indo de MSB → LSB e depois para a esquerdaE2 vezes. Se tivesse sido escrito a partir de LSB → MSB, apenas a mudança para a direitaE2 os tempos dariam o mesmo resultado.

Estou surpreso que, em qualquer outro lugar do C ++, o idioma pareça projetar a ordem de escrita natural (inglês; da esquerda para a direita) (ao executar operações bit a bit, como deslocamento, etc.). Por que ser diferente aqui?

questionAnswers(2)

yourAnswerToTheQuestion