我写了一个代码,它接收以十为底的数字,并给我们二进制数。但对于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";