当我使用std::bitset<N>::bitset( unsigned long long )这个构造一个bitset时,当我通过它访问它时operator[],这些位似乎是以little-endian方式排序的.例:
std::bitset<4> b(3ULL);
std::cout << b[0] << b[1] << b[2] << b[3];
Run Code Online (Sandbox Code Playgroud)
打印1100而不是0011结尾(或LSB)位于小(低)地址,索引0.
它说,查找标准
将前M位位置初始化为相应的位值
val
程序员自然会想到从LSB到MSB的二进制数字(从右到左).所以前M位的位置可以理解为LSB→MSB,因此位0将为b[0].
然而,在转变中,定义是如此
E1<< 的值E2是E1左移位E2位置; 空位是零填充的.
这里必须解释E1从MSB→LSB开始的位,然后是左移E2时间.如果它是从LSB→MSB写的,那么只有右移E2时间会产生相同的结果.
我很惊讶在C++的其他地方,语言似乎投射出自然(英语;从左到右)的写作顺序(当进行诸如移位之类的按位操作时).为什么在这里不一样?