我创建了一种生成随机二进制数的方法,其中n位数最多为256位。为了继续我的程序,我需要使用我的二进制值取向量并将其放入十进制数组,然后将该数字转换为int
小数。这是以下函数,它创建随机二进制向量,并尝试转换为十进制。我无法将二进制向量转换为十进制数。
int random_binary(int n, int m){
vector<int> binary;
for(int i = 0; i < n; i++)
{
m = rand() % 2;
binary.push_back(m);
}
binary.push_back(1);
int j;
for(j = 0; j < binary.size(); j++)
{
cout << binary[j];
}
cout <<"\n";
int len = binary.size();
int a = binary[len]; //having trouble right here
int decimalValue = 0;
for (int i = len-1; i>= 0; i--)
{
decimalValue = decimalValue + binary[i]*pow(2,len-i-1);
}
return decimalValue;
}
如果有人能够帮助解决这个问题,那将非常感激。
答案 0 :(得分:0)
代码并不是那么糟糕,但确实存在一些问题:
int
值在大多数平台上只能容纳32位,如果只想要非负值,则只能容纳31位。因此,对于256位二进制数字,您将需要使用其他内容。
int a = binary[len]; //having trouble right here
- 我认为@PaulMcKenzie将此解释为尝试使用可变数量的元素(int a[len];
)声明一个int数组。我认为这可能是int
变量到binary
中最后一个条目的元素。无论哪种方式都是错误的 - 但无论如何你永远不会使用a
,我认为没有任何可能的用途。所以只需删除该行。
不是错误,但您应该明白int decimalValue
不是十进制,它是一个整数,很可能作为一组位存储在计算机内,并且只显示为小数转换后以特定方式显示的数字,例如使用std::cout
打印时。
在求和循环中,std::pow
不应该用于整数值,但幸运的是,左移位运算符可用于获得2的整数幂:
decimalValue = decimalValue + binary[i] * (1<<(len-i-1));