相关疑难解决方法(0)

为什么std :: bitset以little-endian方式暴露位?

当我使用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<< 的值E2E1左移位E2位置; 空位是零填充的.

这里必须解释E1从MSB→LSB开始的位,然后是左移E2时间.如果它是从LSB→MSB写的,那么只有右移E2时间会产生相同的结果.

我很惊讶在C++的其他地方,语言似乎投射出自然(英语;从左到右)的写作顺序(当进行诸如移位之类的按位操作时).为什么在这里不一样?

c++ binary endianness bitset

8
推荐指数
2
解决办法
2795
查看次数

标签 统计

binary ×1

bitset ×1

c++ ×1

endianness ×1