C++ 位集无法处理某些数字

C++ 位集无法处理某些数字,c++,bitset,C++,Bitset,我正在尝试将8字节宽的数字转换为位字符串 #include <stdio.h> #include <stdlib.h> #include <string> #include <bitset> void getAsString(int64_t mask ) { printf("mask = %lld\n", mask); std::string test = std::bitset< 64 &g

我正在尝试将8字节宽的数字转换为位字符串

#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <bitset>
     void getAsString(int64_t mask )
    {
        printf("mask = %lld\n", mask);
        std::string test = std::bitset< 64 >( mask ).to_string();
        printf("test = %s \n", test.c_str() );
    }

    int main()
    {
        int64_t allowedBits[4] = { 0x0000000000000001L, 0x0000000000010000L, 0x0000000100000000L, 0x0001000000000000L };
        for (int i = 0; i < 4; ++i)
        {
            getAsString(allowedBits[i]);
        }
    }
这台机器的代码是一样的。 分销商ID:CentOS 说明:CentOS 6.8版(最终版) 发行:6.8 代号:Final

g++(GCC)4.4.7 20120313(红帽4.4.7-17)

给出以下输出

mask = 1
test = 0000000000000000000000000000000000000000000000000000000000000001
mask = 65536
test = 0000000000000000000000000000000000000000000000010000000000000000
mask = 4294967296
test = 0000000000000000000000000000000000000000000000000000000000000000
mask = 281474976710656
test = 0000000000000000000000000000000000000000000000000000000000000000
我已经检查了int64\t的宽度。这两台机器都是8。 对于掩码4294967296和281474976710656,字符串为零


非常感谢您提供的任何帮助。

根据您的编译器版本(gcc-4.4.7),代码可能使用了一个未更新的库来处理C++11。
std::bitset
构造函数的前C++11规范使用了一个整数
无符号long
。对于32位构建
无符号长
使用32位。因此,参数在传递给
std::bitset
的构造函数之前将被截断


我验证了gcc-4.4.7附带的
libstdc++
确实使用了
unsigned long
作为构造函数中的类型。

如果
int64\u t
不是8字节,您就会遇到问题。
mask
的类型是什么?提示:这意味着按预期提供一个工作。它仍然没有完成。(Complete应该包含类似“
intmain(){
”和“
}
”的内容)@NiyazK请将其编辑到问题中。它作为一个注释是不可读的。我发现了问题,似乎我用于构建的makefile有标记-m32。在将其更改为-m64后,它工作正常。谢谢你的帮助:)
mask = 1
test = 0000000000000000000000000000000000000000000000000000000000000001
mask = 65536
test = 0000000000000000000000000000000000000000000000010000000000000000
mask = 4294967296
test = 0000000000000000000000000000000000000000000000000000000000000000
mask = 281474976710656
test = 0000000000000000000000000000000000000000000000000000000000000000