为什么bitset以相反的顺序存储这些位?经过多次打击后,我终于写了这个binary_to_dec.可以简化吗?
int binary_to_dec(std::string bin)
{
std::bitset<8> bit;
int c = bin.size();
for (size_t i = 0; i < bin.size(); i++,c--)
{
bit.set(c-1, (bin[i]-'0' ? true : false));
}
return bit.to_ulong();
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*edy 30
Bitset将其数字存储在您认为是"反向"的顺序中,因为即使字符串的字符按递增的索引顺序排列,我们也会按重要性的降序编写数字的数字.
如果我们以little-endian顺序编写我们的数字,那么你就不会有这种混淆,因为你的字符串索引0处的字符代表bitset的第0位.但是我们用big-endian顺序写下我们的数字.我害怕我不知道导致这一惯例的人类历史的细节.(请注意,任何特定CPU用于存储多字节数字的字节顺序都是无关紧要的.我在谈论我们在显示人类阅读数字时使用的字节序.)
例如,如果我们以二进制形式写入十进制数12,则得到1100.最低有效位在右侧.我们称之为"第0位".但是,如果我们把在一个字符串,"1100"的字符在该字符串的索引0表示第3位,而不是位0.如果我们创建了在相同的顺序字符位的位集合,to_ulong将返回3而不是12.
bitset类有一个接受a的构造函数std::string,但它期望字符的索引与该位的索引匹配,因此您需要反转该字符串.试试这个:
int binary_to_dec(std::string const& bin)
{
std::bitset<8> bit(std::string(bin.rbegin(), bin.rend()));
return bit.to_ulong();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16006 次 |
| 最近记录: |