C++ 在此代码中输入10000时,我没有得到预期的输出。问题在于如何将十进制转换为二进制
在此代码中输入10000时,我没有得到预期的输出。这是代码C++ 在此代码中输入10000时,我没有得到预期的输出。问题在于如何将十进制转换为二进制,c++,loops,c++11,c++14,c++17,C++,Loops,C++11,C++14,C++17,在此代码中输入10000时,我没有得到预期的输出。这是代码 *十进制到二进制*\ #include<iostream> using namespace std; int main() { int N,sum=0,pv=1,r; cin>>N; while(N>0){ r=N%2; sum= sum + r*pv; N=N/2;
*十进制到二进制*\
#include<iostream>
using namespace std;
int main() {
int N,sum=0,pv=1,r;
cin>>N;
while(N>0){
r=N%2;
sum= sum + r*pv;
N=N/2;
pv=pv*10;
}
cout<<sum<<endl;
}
#包括
使用名称空间std;
int main(){
int N,和=0,pv=1,r;
cin>>N;
而(N>0){
r=N%2;
总和=总和+r*pv;
N=N/2;
pv=pv*10;
}
cout1000010等于1001110001000002。
在大多数体系结构上,std::numeric\u limits::max()
为2147483647(10),因此在计算sum
anpv
时会出现整数溢出
可以为变量使用更宽的类型,例如“代码>未签名的长long < /代码>,它应该至少是64位类型,但这不是解决方案。考虑214748364710等于111111111111111111111111111 2和111111111111111111111111111111 0比1844 6740407370955 161510更大。< /P>
您似乎忘记了,
N
作为一个int
,已经有了二进制表示。std::cin>>N;
已经为您执行了十进制到二进制的转换。您所要做的就是提取这些位的值
// Calculate the number of bits in a int
unsigned i = sizeof(N) * CHAR_BIT - 1;
// Skip the leading zeroes, if you want
do
{
if ( (N >> i) & 1u)
break;
--i;
}
while ( i );
// Print the bits, shifting and masking the number
do
{
std::cout << ((N >> i) & 1u);
}
while ( i-- );
std::cout << '\n';
//计算整数中的位数
无符号i=sizeof(N)*字符位-1;
//如果需要,请跳过前导零
做
{
如果((N>>i)和1u)
打破
--一,;
}
而(i),;
//打印位、移位和屏蔽数字
做
{
标准:电流>i)和1u);
}
而(我--),;
标准::cout1000010等于1001110001000002。
在大多数体系结构上,std::numeric\u limits::max()
为2147483647(10),因此在计算sum
anpv
时会出现整数溢出
可以为变量使用更宽的类型,例如“代码>未签名的长long < /代码>,它应该至少是64位类型,但这不是解决方案。考虑214748364710等于111111111111111111111111111 2和111111111111111111111111111111 0比1844 6740407370955 161510更大。< /P>
您似乎忘记了,
N
作为一个int
,已经有了二进制表示。std::cin>>N;
已经为您执行了十进制到二进制的转换。您所要做的就是提取这些位的值
// Calculate the number of bits in a int
unsigned i = sizeof(N) * CHAR_BIT - 1;
// Skip the leading zeroes, if you want
do
{
if ( (N >> i) & 1u)
break;
--i;
}
while ( i );
// Print the bits, shifting and masking the number
do
{
std::cout << ((N >> i) & 1u);
}
while ( i-- );
std::cout << '\n';
//计算整数中的位数
无符号i=sizeof(N)*字符位-1;
//如果需要,请跳过前导零
做
{
如果((N>>i)和1u)
打破
--一,;
}
而(i),;
//打印位、移位和屏蔽数字
做
{
标准:电流>i)和1u);
}
而(我--),;
std::cout您需要使用无符号long-long-int
类型修饰符来获得预期的输出。sum
的值超出了公共整数的限制
只需修改您的声明:
无符号长整型N,和=0,pv,r;
您的代码需要进行上述修改:
输出:
您可以开始了!您需要使用无符号long long int
类型修饰符来获得预期的输出。sum
的值超出了公共整数的限制
只需修改您的声明:
无符号长整型N,和=0,pv,r;
您的代码需要进行上述修改:
输出:
很好,可以开始了!看起来您正在反转位。您首先得到N的最低位,但将它们放入总和的最高有效位。您希望得到什么输出,以及您得到什么输出?当输入值为10000这样的大数字时,我得到的输出为-468756976,但预期输出为10011100010,看起来像是yo你正在反转位。你首先得到N的最低位,但把它们放入和的最高有效位。你期望得到什么输出,你得到什么输出?当输入像10000这样大的数字时,我得到的输出是-468756976,但期望的输出是10011100010000谢谢你的帮助,因为我是编程的初学者谢谢或者你的帮助,因为我是编程新手