C++ 在此代码中输入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;

在此代码中输入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;
            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
an
pv
时会出现整数溢出

可以为变量使用更宽的类型,例如“代码>未签名的长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
an
pv
时会出现整数溢出

可以为变量使用更宽的类型,例如“代码>未签名的长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谢谢你的帮助,因为我是编程的初学者谢谢或者你的帮助,因为我是编程新手