我想从十进制数返回 16BIT 二进制数。我有 2 个代码。
在第一个中,我尝试返回一个字符数组。
在第二个中,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;
}
}
}
最佳答案
我尝试回答你的问题。我对任何人对我投反对票不感兴趣...所以我尽力而为!!
- 如果您想要十进制值的二进制表示形式,最简单的方法是检查位 0,然后移动该数字(只要该数字不为零)。右移一位相当于除以 2。
- 如果您想中止,只需检查数字是否为零,而不是检查数字是否在 0 到 65535 之间。如果您想要固定的轮类次数,也可以从 1 数到 16。
所以我建议这样:
do {
if (number & 1) {
printf("1");
} else {
printf("0");
}
number >>= 1;
} while(number);
这将以相反的方向输出 0 和 1,直到不再有 1。
如果您想要固定宽度的表示:
#define BITS 16
for (int bits = 0; bits < BITS; bits++) {
if (number & 1) {
printf("1");
} else {
printf("0");
}
number >>= 1;
}
如果要将其存储到数组中,请将 printf 替换为
char *bitmap = (char*)malloc(BITS+1);
bitmap[BITS] = '\0'; // NULL termination
bitmap[BITS-1-bits] = '1';
或
bitmap[BITS-1-bits] = '0';
分别 并且有
printf("%s\n", bitmap);
不要忘记释放(位图)。
始终考虑数组是从零开始索引的。所以最好 如果是 16 位,则位编号从 0 到 15。 我没有测试过这段代码,但它的工作原理是这样的。 :)
关于c - C Char 数组中的十进制到二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48321129/