0

考虑以下用 C++11 编写的代码:

#include <iostream>
#include <bitset>
#include <cstdint>

int main() {

    std::uint64_t a = 0000000000000000000000000000000000000000000000001111111100000000;
    std::bitset<64> b(a);

    std::cout << b << std::endl;

    return 0;
}

代码的输出是:

0000000000000000001001001001001001001001000000000000000000000000

为什么这个输出与值不对应a

4

2 回答 2

10

如果你想写一个二进制数,你需要使用0b前缀。

std::uint64_t a = 0b0000000000000000000000000000000000000000000000001111111100000000;
std::bitset<64> b(a);

您的示例已修复并可以实时工作

于 2015-04-24T20:28:58.400 回答
3

如前所述,您的“二进制”字符串实际上是一个更大数字的八进制表示。替代方法是从字符串转换,从十进制表示或在字符串前面加上“0b”以表示二进制表示如下

#include <iostream>
#include <bitset>
#include <cstdint>

int main() {

    std::bitset<64> foo (std::string("0000000000000000000000000000000000000000000000001111111100000000"));
    std::uint64_t  bar = foo.to_ulong();
    std::uint64_t beef = 0b0000000000000000000000000000000000000000000000001111111100000000;
    std::bitset<64> dead (beef);

    std::cout << foo << std::endl;
    std::cout << bar << std::endl;
    std::cout << dead << std::endl;
    std::cout << beef << std::endl;

    return 0;
}
于 2015-04-24T20:35:05.647 回答