![](/img/trans.png)
[英]Why is the bitset function not returning correct decimal value for binary strings like 1110 or 1011?
[英]Problem when converting from decimal to binary and returning a bitset
我有一个奇怪的问题。 我创建了一个简单的函数,可以将十进制转换为二进制。 该参数是一个int值,它以十进制表示数字,并且该函数返回一个代表二进制数的位集。
问题是,对于小于10000000000000000000000000000000二进制数(十进制为2147483648)的二进制数,转换可以正常工作,但是当要转换的数字较高时,转换将无法正常进行。 错误在哪里???
在这里,我向您发送功能:
bitset<15000> Utilities::getDecToBin(int dec)
{
bitset<15000> columnID;
int x;
for(x=0;x<columnID.size();x++)
{
columnID[x]=dec%2;
dec=dec/2;
}
return columnID;
}
预先感谢您的所有帮助! :D
32位int的范围是-2,147,483,648至2,147,483,647。
如果您的意思是1073741825,那么我看不到任何错误。
如果要在最重要的位置(即2147483648)增加一点,则可能会遇到签名/未签名的问题。
我看到您通过columnID的大小来限制循环。 最好也以dec的大小(以位为单位)限制它,或者在dec为0时停止它。
令人惊讶的是,它最多只能使用30位,您应该能够管理31位,但是对于32位,则需要无符号整数。 如果您使用无符号的64位整数,则可以管理的内容更多,但是15,000位整数只能通过特殊的类来实现。
您应该使用一个long int
,数组long int
,甚至一个string
输入到你的方法(具体取决于数据的来源以及如何将调用函数上)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.