为什么在十进制到二进制代码中,当我们输入63以上的数字时,它不能正常工作



我写了一个代码,它接收以十为底的数字,并给我们二进制数。但对于64以上的数字,它就是不能正常工作。我不知道为什么。请帮帮我。

#include<iostream>
#include<conio.h>
using namespace std;
main() 
{
int c;  int b,a[c];
cin>>b;
for(c=0;b>1;c++)
{
a[c]=b%2;
b=b/2;
}
cout<<b;
c--;
for(c;c>=0;c--){
cout<<a[c];
}
getch(); 

问题存在于此:

int c;  int b,a[c];

您正在定义大小为c的可变长度数组(非标准,btw(,但您没有给c一个值,因此,这是未定义的行为(在给它一个值之前使用c(。由于您处理的是整数,因此可以执行int a[32],这将允许您的代码工作。

另一种使用字符串的方法:

std::string str;
while ( b != 0 ) {
str = std::to_string( b % 2 ) + str;
b /= 2;
}
std::cout << str;

需要注意的几点是:
main需要返回类型,并且应该是int main()
conio.h不是标准的,不应该使用
int a[c]是可变长度数组(VLA(,不是标准的并且不应该使用
using namespace std是个坏主意。

这个问题已经在其他答案中指出了,所以我只想给你一个替代的解决方案。

如果你想转换成二进制,你也可以尝试使用比特集。

#include <bitset>
using namespace std;
bitset<32> bv;
bv = 65;
cout << "Binary value " << bv <<"n";
bv = 195;
cout << "Binary value " << bv <<"n";

最新更新