【发布时间】:2018-06-26 17:18:14
【问题描述】:
正在网上搜索简单指南,但找不到。
我构建了一个从十进制到二进制的转换器,并将 1 和 0 保存在向量中。我现在想把那个向量变成一个整数。 我找到了各种转换为字符串而不是整数的方法(我不太了解),可以避免吗? 我想让它尽可能简单。
这是我的代码:
c.hpp:
#ifndef C_HPP
#define C_HPP
#include <vector>
class Dualrechnung{
private:
std::vector<int> vec;
int z = 123456; //Eingegebene Zahl
int t_z = z; //temp Zahl
public:
Dualrechnung();
~Dualrechnung();
};
#endif
c.cpp:
#include <vector>
#include <cmath>
#include <sstream>
#include "c.hpp"
#include <iostream>
Dualrechnung::Dualrechnung()
{
int b;
for (int i=0; (t_z-(pow(2,i))) >= 0; i++) //finds biggest power of 2 in z
{
b= i;
}
t_z-=pow(2,b); //whats left after the biggest power
vec.push_back(1);
for(int i = b; i > 0; --i) //checks for every power of 2 multiples smaller than b if they exist in z. if they are, saves 1 for that power in the vector and if not, saves 0.
{
b--;
if((t_z-pow(2,b)) >= 0)
{
vec.push_back(1);
t_z-=pow(2,b);
}
else{vec.push_back(0);}
}
// here I'd like that integer with the information from the vector
int bin; //binary value of z
std::cout << z << " in Dual ist " << bin;
}
Dualrechnung::~Dualrechnung(){}
c_test.cpp:
#include "c.cpp"
#include <iostream>
int main(){
Dualrechnung *d = new Dualrechnung();
delete d;
return 0;
}
【问题讨论】:
-
您不应将 pow() 与整数一起使用。
-
“将 1 和 0 保存在向量中”看起来你只需要
std::bitset -
与@drescherjm 的评论无关的扩展:
pow是为真正讨厌的情况而设计的,比如 e 到 pi 的幂,这可以使它用于相对简单的事情,比如 2 到 x 严重昂贵的。使用简单的乘法可能会更好,可能是循环或位移 (1 << n)。 -
这样的循环会是什么样子?可以举个简单的例子吗?