使用指数将十进制转换为二进制
Converting decimal to binary using exponents
我被要求编写代码来将十进制转换为二进制形式。 我已经尝试了几种不同的方法,但没有给我我需要的订单。 所以我目前被困在如何进行上。
我已经尝试通过正常查找二进制比较来尝试,但它以不正确的顺序给我,假设正确的顺序是 1001100,我只是得到0011001。 而且我无法更改顺序。 我不允许使用除iostream,cmath和string之外的任何其他库。 我现在尝试使用指数 2^指数简单地找到转换。
这是我目前拥有的:
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;
}
我目前根本没有收到任何结果。
下面是一个收集最低有效位 (LSB( 中
位的示例://...
while (num > 0)
{
const char bit = '0' + (num & 1);
biNum += bit;
num = num >> 1;
}
解释
循环继续,直到num
变量为零。 除非您真的想要它们,否则添加额外的零是没有意义的。
如果位为 1,则 (num & 1)
表达式返回 1,如果位为 0,则返回 0。
然后将其添加到字符0
以生成'0'
或'1'
。
变量声明为 const
,因为它在声明(定义(后不会被修改。
新创建的字符将追加到位字符串中。
最后,num
向右移动一位(因为该位已经处理过(。
还有许多其他方法可以按最高有效位 (MSB( 顺序收集位。 这些方式留给OP和读者。:-)
你去吧。 这将以正确的顺序输出位:
#include <iostream>
#include <string>
int main ()
{
unsigned num;
std::string biNum;
std::cin >> num;
while (num)
{
char bit = (num & 1) + '0';
biNum.insert (biNum.cbegin (), bit);
num >>= 1;
}
std::cout << biNum;
return 0;
}
现场演示
您可以使用递归函数以相反的顺序打印结果,避免使用容器/数组,如下所示:
void to_binary(int num) {
int rem = num % 2;
num = (num - rem) / 2;
if (num < 2){
std::cout << rem << num;
return;
}
to_binary(num);
std::cout << rem;
}
int main()
{
to_binary(100);
}
相关文章:
- visual在c++中将十进制数转换为二进制数
- C++十进制到二进制,如何转换
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- C++从二进制转换为十进制数
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- 我编写了代码将十进制分数转换为其二进制等效数.它编译得很好,但在执行时挂起
- C2678 二进制 '==':未找到采用 'Card' 类型左操作数的运算符(或者没有可接受的转换)
- 如何在 O(n) 中将二进制和转换为二进制
- 我写的 ASCII 到二进制转换器C++向后显示二进制,如何使其正确显示?
- 十进制到二进制转换器 c++
- 在C++中将结构转换和存储为二进制
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 如何在C ++中将二进制字符串128位转换为十进制字符串?
- 如何将二进制文件头示例代码 (C++/C#) 转换为 Python?
- 二进制 '==':未找到采用 'Enemy' 类型左侧操作数的运算符(或者没有可接受的转换)
- 将二进制转换为十进制,我如何要求用户仅输入二进制
- QTextStream的操作数到二进制的转换无效
- 在c++中读取和转换二进制数据
- c++转换二进制到十进制从字符串输入
- 计算器转换二进制到浮点值-我做错了什么