我想从十进制数返回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;
}
}
}
答案 0 :(得分:1)
我试着回答你的问题。我对任何向我投票的人都不感兴趣...所以我尽我所能!!
所以我会建议这样的事情:
do {
if (number & 1) {
printf("1");
} else {
printf("0");
}
number >>= 1;
} while(number);
这将在反方向上输出0和1,直到没有更多。
如果您想要固定宽度表示:
#define BITS 16
for (int bits = 0; bits < BITS; bits++) {
if (number & 1) {
printf("1");
} else {
printf("0");
}
number >>= 1;
}
如果你想将它存储到一个数组中,请用
替换printfchar *bitmap = (char*)malloc(BITS+1);
bitmap[BITS] = '\0'; // NULL termination
bitmap[BITS-1-bits] = '1';
或
bitmap[BITS-1-bits] = '0';
分别
printf("%s\n", bitmap);
别忘了free(bitmap).
始终考虑一个数组从零开始索引。所以最好是 在16位的情况下,位编号从0到15。 我没有测试过这段代码,但它的工作方式是这样的。 :)
答案 1 :(得分:0)
这样做,函数select tmp.num as client_num, CONCAT(
CASE WHEN tmp.num < 26000 THEN '' ELSE CHAR(ASCII('A') - 1 + (tmp.num / 26000)) END,
CHAR (ASCII('A') + (tmp.num / 1000) % 26),
RIGHT('000'+CAST(tmp.num % 1000 AS VARCHAR(3)),3)) as client_id
from
(select 1 as 'num'
union
select 10
union
select 150
union
select 1000
union
select 25999
union
select 26000
union
select 27000
union
select 100000) tmp
会覆盖+------------+-----------+
| client_num | client_id |
+------------+-----------+
| 1 | A001 |
| 10 | A010 |
| 150 | A150 |
| 1000 | B000 |
| 25999 | Z999 |
| 26000 | AA000 |
| 27000 | AB000 |
| 100000 | CW000 |
+------------+-----------+
(How do I return a char array from a function?)中的数组bin()
:
arr