【发布时间】:2019-12-14 13:30:23
【问题描述】:
我被要求编写将十进制转换为二进制形式的代码。我尝试了几种不同的方法,但没有给我需要的顺序。所以我目前坚持如何进行。
我尝试通过正常查找二进制比较,但它给我的顺序不正确,假设正确的顺序是 1001100,我只得到 0011001。我无法更改顺序。我不允许使用除 iostream、cmath 和 string 之外的任何其他库。我现在试图简单地使用指数 2^exponent 找到转换。
这是我目前拥有的:
int num, exp,rem;
string biNum;
cout<<"Enter decimal number: "<<endl;
cin>>num;
for (exp = 0; pow(2, exp) < num; exp++) {
}
while (num > 0) {
rem = num % (int) pow(2, exp);
if (rem != 0) {
biNum = biNum + '1';
} else {
biNum = biNum + '0';
}
exp--;
}
cout<<biNum;
return 0;
}
我目前没有收到任何结果。
【问题讨论】:
-
不要使用
pow(2, X),因为它有很多开销。改用左移:(1 << X)。许多处理器可以在一条或两条指令中实现左移。 -
您可能希望使用按位与来测试位位置而不是余数运算符
'%'。同样,AND 操作通常是 1 条或更多条指令(用于向寄存器加载值)。 -
该任务的预期解决方案将不使用
pow(),这是一种昂贵的浮点计算,没有用于执行简单整数计算的业务,可以使用位移原语轻松执行。更不用说floating point math is broken。我几乎可以向你保证,无论是谁要求你写这篇文章,都会拒绝这种解决方案。您的 C++ 书籍将提供有关 C++ 中可能的各种位移操作的更多信息。 -
和这些问题一样,这里唯一的十进制到二进制转换是
cin >> num;。从那里开始,数字是二进制的,这可以通过常数 10 的除法和余数运算得到证实。您真正要做的是从二进制转换为分区二进制。
标签: c++ binary decimal exponent