加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为什么std :: bitset的位是相反的顺序?

发布时间:2020-12-16 05:56:44 所属栏目:百科 来源:网络整理
导读:参见英文答案 Why does std::bitset expose bits in little-endian fashion?2 为什么bitset以相反的顺序存储位?经过多次训练,我终于写了这个binary_to_dec.可以简化吗? int binary_to_dec(std::string bin){ std::bitset8 bit; int c = bin.size(); for (s
参见英文答案 > Why does std::bitset expose bits in little-endian fashion?2
为什么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();
}

解决方法

Bitset将其数字存储在您认为是“反向”顺序中,因为我们以递减的顺序写入数字的数字,即使字符串的字符以递增的索引顺序排列.

如果我们以小数排序编写我们的数字,那么您不会有这种混淆,因为字符串索引为0的字符将表示位组的位0.但是我们以大排序的顺序编写我们的数字.恐怕我不知道导致这个公约的人类历史的细节. (请注意,任何特定的CPU用于存储多字节数字的字符串是无关紧要的,我在谈论在显示人类阅读的数字时使用的字节数.)

例如,如果我们用二进制写十进制数12,我们得到1100.最低有效位在右边.我们称之为“位0”.但是,如果我们把它放在一个字符串“1100”中,则该字符串的索引号0的字符表示位3,而不是位0.如果我们以与字符相同的顺序创建了一个位组,那么to_ulong将返回3的12.

bitset类具有接受std :: string的构造函数,但它希望字符的索引与位的索引匹配,因此您需要反转字符串.尝试这个:

int binary_to_dec(std::string const& bin)
{
  std::bitset<8> bit(std::string(bin.rbegin(),bin.rend()));
  return bit.to_ulong();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读