您的位置:首页 > 编程语言 > C语言/C++

关于bitset中低阶位与高阶位的理解

2015-05-18 11:42 197 查看
C++ Primer中介绍bitset时有这么一句话:“(bitset<32> bitvec)以0位开始的位串是低阶位(low-order bit),以31位开始的位串是高阶位(high-order bit)。”

以下是摘自一位大神的理解:

计算机里面的位串有两种排列顺序,即big endian和small endian,也就是你所说的高阶位和第阶位。

举一个例子,你可能就明白了。
比如说位串 0101,一共有4位,它的值的十进制是5。5 = 0*2^3 + 1*2^2 + 0*2^1 + 1*2^0。从左到右,其阶依次为3, 2, 1, 0。

如果我们按从左到右的顺序把这4个bit放到bitset中(高阶放到了低位,低阶放到了高位),那就是 bitvec[0] = 0, bitvec[1]=1, bitvec[2]=0, bitvec[3]=1。很明显,bitvec[3]的阶位是0,最低,bitvec[0]的阶是3,最高。所谓以xx位开始的,也就是说xx位的阶是0。在我们这个例子中,bitvec[3]的阶是0,那就是一个big endian排序。

如果我们按从右到左的顺序把这5个bit放到bitset中(低阶放到了低位,高阶放到了高位),那就是bitvec[0]=1, bitvec[1]=0, bitvec[2]=1, bitvec[3]=0。 也就是说bitvec[0]是其最低阶, bitvec[3]是最高阶。很明显我们的0101串应该从bitvec[0]开始, 就是一个small endian的bit排序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息