使用%2在C中使用十进制到二进制

时间:2018-02-27 15:27:28

标签: c visual-c++

#include "stdafx.h"
int main()
{
   int num = 11, i = 10;
   char s[10];
   while (num != 0)
   {
      if (num % 2 == 0)
      {
         num = num / 2;
         s[i - 1] = 0;
         i = i - 1;
      }
      if (num % 2 == 1)
      {
         num = (num - 1) / 2;
         s[i - 1] = 1;
         i = i - 1;
      }
      return s[10];
   }
   printf("\n %s", s[10]);
   getchar();
   return 0;
}

嗨,我对C代码很陌生,所以也许我会忽略一些非常简单的东西,但是当我运行这段代码时,它并没有显示任何输出。而且我相信还有更多的错误本来可以简化。

3 个答案:

答案 0 :(得分:0)

if (num % 2 == 0)
{
    num = num / 2;
    s[i - 1] = 0;
    i = i - 1;
}
if (num % 2 == 1)
{
    num = (num - 1) / 2;
    s[i - 1] = 1;
    i = i - 1;
}

除了在这些语句之后立即返回(导致程序立即退出),在此处将s的字符设置为'\ 0'或'\ 1'。它们都不可打印;此外,'\ 0'表示字符串结束。将文字01更改为相应的'0''1'

此外,您需要将一个零字符('\0')放入s以终止该字符串,并增加s的大小以适应该额外字符。最简单的方法是将s初始化为从开始的所有零:char s[11] = {'\0'};

从循环体中删除return s[10];

答案 1 :(得分:0)

您的代码存在一些问题。

  • while循环中的指令只执行一次,然后程序退出,因为您在循环结束时调用return s[10]。从main返回有效退出该计划。
  • %s printf令牌需要一个字符串,其中c只是一个char的数组(char *或char []),但你传递一个char(s [10] )。如果您想打印s,请使用printf("%s\n", s);
  • 更确切地说,长度为N的正确c字符串是N个字符的序列(即数组),后跟字符串结尾字符,' \ 0&# 39 ;.因此,如果您想要手动构建一个大小为10"的字符串,那么首先要定义一个大小合适的数组char s[11]。然后设置s[10] = '\0';并使用0-9索引修改构成字符串的所有其他字符。
  • 您需要在字符中添加字符('1''0')而不是整数(不是10)。

答案 2 :(得分:0)

#include <stdio.h>

int main()
{
    int num = 11, i = 0, j = 0;
    char s[33];
    char be_s[33];

    do
    {
        s[i] = num % 2 ? '1' : '0';
        num = num / 2;
        i++;
    } while (num != 0);

    s[i] = '\0';

    printf("Little endian number: %s\n",s);

    for(j = 0 ; j < i ; j++)
    {
        be_s[j] = s[(i - 1) - j];
    }

    be_s[j] = '\0';
    printf("Big endian number: %s\n",be_s);
    return 0;
}

正如有人已经解释过你有多个问题:

  1. s的大小:您要转换的数字有多大? Int(通常)是32位,所以你需要32个字符来写它。你还需要一个特殊的字符来结束字符串&#39; \ 0&#39;,所以33个元素的字符数组应该适合这个练习
  2. Endianness:正如您可能已经注意到的那样,您希望用左侧更重要的位来表达它。问题是你无法知道前1的位置。一个选项是在评估数字后恢复位顺序
  3. 在一段时间内回归:如果你&#34;返回&#34;那么while不是一个函数。您正在退出主要功能,从而关闭程序
  4. s [3]:这不是字符串,是字符串的第4个值。如果你想指向字符串开头的指针你可以使用s,或者如果你想从元素n开始读取字符串,你可以使用&s[n - 1](&amp; =内存地址) ,字符串s的n个元素;请注意,数组从元素0开始
  5. char值为0和1:正如其他所述char 0char '0'不同,第一个是ascii表中的元素0,第二个是元素表示零在ascii表中
  6. 还有很多话要说,如果你不理解我的例子,只要问