c - C 中使用 %2 将十进制转换为二进制

标签 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 代码还很陌生,所以也许我忽略了一些非常简单的东西,但是当我运行此代码时,它不会显示任何内容作为输出。我相信还有更多错误至少可以被简化。

最佳答案

#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个字符来写入它。此外,您还需要一个特殊字符来结束字符串“\0”,因此包含 33 个元素的 char 数组对于本练习来说应该没问题
  2. 字节序:正如您可能注意到的那样,您想用左侧的更高有效位来表达它。问题是你无法知道第一个 1 会在哪里。一个选项是在评估数字后恢复位顺序
  3. 在一段时间内返回:while 不是函数,如果“返回”,则退出主函数,从而关闭程序
  4. s[3]:这不是字符串,是字符串的第四个值。如果您希望指针指向字符串的开头,您可以使用 s,或者如果您想从元素 n 开始读取字符串,您可以使用 &s[ n - 1](&=字符串 s 的 n 个元素的内存地址;请注意,数组从元素 0 开始)
  5. char值0和1:正如其他所说,char 0char '0'不同,第一个是ascii表中的元素0,第二个是ascii 表中代表零的元素

还有很多东西要说,如果你不明白我的例子就问

关于c - C 中使用 %2 将十进制转换为二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49012291/

相关文章:

c++ - 如何检查服务器端口是否打开并从 MFC 连接

c - Eclipse 中包含路径问题 : probably Indexer

c - 如何从定义初始化 char[]

c - 为什么我在编译时出现无法识别文件格式的错误?

c++ - 如何用 union 初始化结构?

c++ - 为什么我可以在 VC 中链接两个导出相同 C 函数的库?

c - 字符串转int数组

C 程序错误:数字常量前需要分号

c++ - 卡在 api getdrivetype

c++ - 写入 COM 端口