leg*_*s2k 8 c++ binary endianness bitset
当我使用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++的其他地方,语言似乎投射出自然(英语;从左到右)的写作顺序(当进行诸如移位之类的按位操作时).为什么在这里不一样?
Pra*_*han 15
就标准而言,没有关于字符串的概念.说到位std::bitset,[template.bitset]/3定义位位置:
当在类的对象
bitset<N>和某个整数类型的值之间进行转换时,位位置pos对应于位值1<<pos.对应于两位或更多位的积分值是它们的位值的总和.
在标准报价中使用这个位位置定义
将第一个
M比特位置初始化为相应的比特值val
一个val用二进制表示11导致bitset<N> b与b[0] = 1,b[1] = 1和其余比特设置为0.