【发布时间】:2018-06-27 12:22:46
【问题描述】:
我想从一个十进制数返回一个 16BIT 二进制。我有 2 个代码。
在第一个中,我尝试返回一个 char 数组。
在第二个中,a 有一个输出,但它的顺序相反。
也许有人看一下代码。
谢谢
输出第一个函数:Þ0000000000010000es (x862uÿ¼×
#include <stdio.h>
#include <stdlib.h>
const int BIT = 16;
void binary(int);
char *bin(int);
int main() {
binary(16);
printf("\n");
printf("%s\n", bin(16));
return 0;
}
char *bin(int x) {
char * new = (char*)malloc(sizeof(char) * BIT + 1);
new[BIT] = '\0';
if (x >= 0 && x <= 65535) {
for (int i = 0; i < BIT; i++) {
if (x % 2 == 0) {
new[BIT - i] = '0';
} else {
new[BIT - i] = '1';
}
x = x / 2;
}
}
return new;
}
void binary(int x) {
if (x >= 0 && x <= 65535) {
for (int i = 0; i < BIT; i++) {
if (x % 2 == 0) {
printf("0");
} else {
printf("1");
}
x = x / 2;
}
}
}
【问题讨论】:
-
您不能返回指向自动数组的指针,因为返回时不再分配存储空间。要么从调用者传入数组,要么使用
malloc分配它。 -
在你的第二个函数中,首先找到最高的非零位作为你的起点,然后从左到右输出数字。
-
最高非零位是什么意思?
-
您的二进制数可能被视为 0 位和 1 位的序列。最高的非零位就是最左边的非零位。从最左边的非零位开始,然后依次输出其右边的位。如果你的号码是 11010,从最左边的 1 开始,然后从左到右依次输出位:1,然后 1,然后 0,然后 1,然后 0。
-
@PaulNie 也许你需要问一个具体的问题。您现在的问题是“也许有人看一下代码” - 这并不具体。试着在你的问题中表达你想要完成什么,以及你设法做到了什么。然后人们可以填写其余部分。此外,您编写了两段代码来完成相同的任务 - 为什么?您尝试通过重写来修复的第一段代码是否有任何问题?如果是,问题是什么?你可以edit你的问题来指定这些细节。