将十进制转换为32位二进制? 将C++中的正整数转换为0位二进制,并显示为32位二进制。 我想用传统的“数学”方式(而不是使用 ButStESE/START>或使用向量>PurBuff*或递归函数或C++中的某些特殊的东西……(一个原因是,您可以用不同语言实现,也许可以)

将十进制转换为32位二进制? 将C++中的正整数转换为0位二进制,并显示为32位二进制。 我想用传统的“数学”方式(而不是使用 ButStESE/START>或使用向量>PurBuff*或递归函数或C++中的某些特殊的东西……(一个原因是,您可以用不同语言实现,也许可以),c++,algorithm,binary,decimal,C++,Algorithm,Binary,Decimal,因此,我继续执行一个简单的程序,如下所示: #include <iostream> using namespace std; int main() { int dec,rem,i=1,sum=0; cout << "Enter the decimal to be converted: "; cin>>dec; do { rem=dec%2; sum=sum + (i*rem);

因此,我继续执行一个简单的程序,如下所示:

#include <iostream>
using namespace std;
int main()
{
    int dec,rem,i=1,sum=0;
    cout << "Enter the decimal to be converted: ";
    cin>>dec;
    do
    {
        rem=dec%2;
        sum=sum + (i*rem);
        dec=dec/2;
        i=i*10;
    } while(dec>0);

    cout <<"The binary of the given number is: " << sum << endl;

    system("pause");
    return 0;
}
#包括
使用名称空间std;
int main()
{
整数dec,rem,i=1,和=0;
cout>dec;
做
{
rem=12月2日;
总和=总和+(i*rem);
dec=dec/2;
i=i*10;
}而(dec>0);

cout您可以使用无符号整数类型。但是,即使使用更大的类型,您最终也会耗尽存储二进制表示的空间。您最好将它们存储在
字符串中,因为您有一个,并且希望其二进制表示,即字符串。因此,使用字符串而不是数字类型来存储结果

因此,除了打印之外,你在
sum
中得到的几乎不可用。它是一个看起来像二进制的十进制数

如果十进制-二进制转换本身不是目的,请注意计算机内存中的数字已经用二进制表示(这不是C++的属性),您只需要一种打印方法。可能的方法之一如下:

int size = 0;
for (int tmp = dec; tmp; tmp >>= 1)
    size++;
for (int i = size - 1; i >= 0; --i)
    cout << ((dec >> i) & 1);
int size=0;
对于(int-tmp=dec;tmp;tmp>>=1)
大小++;
对于(int i=size-1;i>=0;--i)
cout>i)和1);
使用字符数组的另一个变体:

char repr[33] = { 0 };
int size = 0;
for (int tmp = dec; tmp; tmp >>= 1)
    size++;
for (int i = 0; i < size; ++i)
    repr[i] = ((dec >> (size - i - 1)) & 1) ? '1' : '0';
cout << repr << endl;
charrepr[33]={0};
int size=0;
对于(int-tmp=dec;tmp;tmp>>=1)
大小++;
对于(int i=0;i>(大小-i-1))&1)?“1”:“0”;

cout正如其他人所指出的,您需要在 字符串。执行此操作的经典方法(适用于2到36之间的任何基数)是:

std::string
toString(无符号n、整数精度、无符号基)
{

使用for循环和预定义的零字符数组断言(base>=2&&base:

#include <iostream>
using namespace std;
int main()
{
    int dec;
    cout << "Enter the decimal to be converted: ";
    cin >> dec;

    char bin32[]  = "00000000000000000000000000000000";
    for (int pos = 31; pos >= 0; --pos)
    {
        if (dec % 2) 
            bin32[pos] = '1';
        dec /= 2;
    }

    cout << "The binary of the given number is: " << bin32 << endl;
}

注意,C++中,可以将一个整数当作布尔值——所有!=0被认为是真的。< /P> < P>递归。

function toBinary(integer num)
  if (num < 2) 
  then
    print(num)
  else
    toBinary(num DIV 2)
    print(num MOD 2)
  endif
endfunction
函数toBinary(整数num)
if(num<2)
然后
打印(个)
其他的
托比纳里(数字2)
打印(数字模式2)
恩迪夫
端功能
这不处理前导零或负数。递归堆栈用于将二进制位反转为标准顺序。

只需写入:

long int dec,rem,i=1,sum=0  
而不是:

int dec,rem,i=1,sum=0;

>应解决问题。<变量>代码> > INT/<代码>。阅读关于C++的代码介绍>代码> += ,<代码> /= 和<代码> *= < /COD>。鉴于您已经检查了答案,我猜不需要数学答案。如果使用字符串表示32位二进制,那么有任何建议吗?ry数字?如果输入5,二进制是101,但在101之前必须是29个“0”位数?显示32位二进制数字需要回答这个问题,这就是为什么?@LongBodie:那么是的,您需要对字符串进行零填充。实际上,在内存中,该值以二进制形式物理表示,这与本周打印二进制表示并不特别相关Y,就像在十进制中打印它不需要用十进制表示物理值。例如,C++中的 > /Cuth>运算符是用两个幂定义的,所以即使在三进制系统中,它也会产生相同的值(虽然代价更高)。@bames53如果数字是用三元表示的,那么为了用三元表示,我们不需要像运算符

>
那样转换它。只需读取和打印存储的数字就足够了。“只需读取和打印存储的数字就够了。”我的观点可以用以下方式重申:在三元机器上访问三元数字看起来就像在任何其他机器上生成三元表示法所做的算术一样。也就是说,一系列除法和mods乘以3。从这个意义上说,物理表示法是不相关的。同样,生成二元表示法看起来是无论你是在十进制、三元还是二元机器上都是一样的。@bames53现在我明白你的意思了。你是对的。我的错误是认为在三元机器上,运算符
>
会有“将一个三元数字向右移位”的语义。嗯…长整型-你确定吗?无论如何,请编辑你的答案并格式化代码(行开始处有4个空格,ctrl-k是您的朋友:)
long int dec,rem,i=1,sum=0  
int dec,rem,i=1,sum=0;