长-长的二进制表示
Binary representation of a long long
因此,我一直在使用位字符串,在旅行中,我需要以二进制形式显示此long-long。变量具有正确的值,如第一个cout所示。但是,当它以二进制形式显示时,缺少一个"1"。你知道是什么原因造成的吗?
#include <iostream>
#include <bitset>
using namespace std;
int main(){
long long truncator=4294967551ll;
cout<<truncator<<"n";
std::bitset<64> b(truncator);
cout<<b;
return 0;
}
输出为:429496755100000000000000000000000011111111
根据http://www.cplusplus.com/reference/bitset/bitset/bitset/,您尝试使用的std::bitset
构造函数只使用unsigned long
,在您的系统上,它可能只有32位。其他系统的unsigned long
为64位,因此其他系统可能看不到此问题(请尝试打印出sizeof(unsigned long)
)。
只有真正的解决方案是从truncator
的低32位构建位集,并手动设置其余的位。
编写自己的函数将long long
转换为字符串:
string convertToBitString(long long value)
{
string str(64, '0');
for(int i = 0; i < 64; i++)
{
if( (1ll << i) & value)
str[63-i] = '1';
}
return str;
}
位集处理64位参数的方式因编译器而异。某些Visual Studio版本接受长长度,而其他编译器则只接受32位长度,即使它们有64位长度可用。不过,打印出二进制表示应该不难。很简单,在我的头顶上,未经测试。。
string str;
do
{
str += ((truncator&1)?'1':'0');
} while (--truncator);
reverse(str.begin(), str.end());
相关文章:
- 浮点数为 32 位和 64 位二进制表示形式
- 如何将uint8_t的二进制表示形式读取为数字
- 二进制表示,如何获得"相关位"?
- C++ 如何以二进制格式表示字符串?
- 编译器C++如何在二进制代码中表示整数
- 了解浮点数的二进制表示形式
- 如何在 mfc c++ 中流式传输.zip文件夹的二进制表示形式
- 浮点逆二进制表示
- 以C++显示浮点类型的二进制表示形式
- 如何使用C 将二进制数字的字符串转换为其签名的十进制表示
- 在二进制表示中将二进制 std::string 转换为 int
- 如何在没有循环的二进制数字表示中只计算1位
- 如何在计算机内存中打印长双重表示的二进制表示
- 将uint8_t转换为其二进制表示
- 如何在C++中操作和表示二进制数
- 如何在C++中表示二进制字节数组数据
- 如何在编程语言中表示二进制字段
- 如何在C++中表示二进制数(用于霍夫曼编码器)
- 如何在表示二进制文件的字符串中查找整数
- 将表示二进制的字符串转换为表示等效十六进制的字符串