在此代码中输入 10000 时,我没有得到预期的输出。问题是关于将十进制转换为二进制
Posted
技术标签:
【中文标题】在此代码中输入 10000 时,我没有得到预期的输出。问题是关于将十进制转换为二进制【英文标题】:I am not getting the expected output while entering 10000 in this code. The problem is about converting decimal to binary 【发布时间】:2020-04-29 19:21:03 【问题描述】:在此代码中输入 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;
【问题讨论】:
How to debug small programs 看起来您正在反转位。您首先获得 N 的最低位,但将它们放入总和的最高有效位。 你期望什么输出,你得到什么输出? 当输入像 10000 这样的大数字时,我得到的输出为 -468756976,但预期输出为 10011100010000 【参考方案1】:您需要使用unsigned long long int
类型修饰符来获得预期的输出。 sum
的值不知何故超出了公共整数的限制。
只需修改您的声明:
unsigned long long int N, sum = 0, pv, r;
您的代码经过上述修改:
输出:
10000
10011100010000
你很高兴!
【讨论】:
感谢您的帮助,因为我是编程初学者【参考方案2】:1000010 等于 100111000100002。
在大多数架构上,std::numeric_limits<int>::max()
是 2147483647(10),因此在计算 sum
和 pv
时会出现整数溢出。
您可以为变量使用更广泛的类型,例如 unsigned long long
,它至少应该是 64 位类型,但这不是解决方案。考虑到 214748364710 等于 11111111111111111111111111111112 和 11111111111111111111111111111110 比 18446745073709551110 大得多。 >
您似乎忘记了 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';
也可以尝试一些负数,您可能会注意到它们在内部使用two's complement 表示。
【讨论】:
以上是关于在此代码中输入 10000 时,我没有得到预期的输出。问题是关于将十进制转换为二进制的主要内容,如果未能解决你的问题,请参考以下文章
model.fit 给出 ValueError :检查输入时出错:预期的 conv2d 得到了形状为 () 的数组
ValueError:检查输入时出错:预期 lstm_1_input 具有 3 个维度,但得到的数组具有形状 (393613, 50)