gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:35:14 24 4
gpt4 key购买 nike

#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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com