我想知道 C 库中是否有一个函数可以将十进制数转换为二进制数并按数字将数字保存在数组的某个位置。例如:2 -> 10 -> 数组 [0] = 0 数组 [1] = 1。谢谢。
7 回答
这里:
void dec2bin(int c)
{
int i = 0;
for(i = 31; i >= 0; i--){
if((c & (1 << i)) != 0){
printf("1");
}else{
printf("0");
}
}
}
但这仅以二进制格式打印整数的值。无论如何,所有数据在内部都以二进制格式表示。
您没有为您定义什么是十进制数。我猜它是那个数字的字符表示(例如ASCII)。
请注意,数字只是数字。二进制或十进制数不存在,但给定的数字可能有二进制和十进制表示。数字不是由数字组成的!
然后您可能希望sscanf(3)或strtol(3) pratoi
将字符串转换为整数(例如 anint
或 a long
),并使用snprintf(3)将整数转换为字符串。
如果要将数字转换为二进制字符串(其中仅包含0
or 1
char
-s),则需要自己编写转换代码。要将二进制字符串转换为某种long
用途strtol
。
C 标准库中没有这样的函数。无论如何,您可以编写自己的:
void get_bin(int *dst, intmax_t x);
结果数组在哪里dst
(带有1
s 和0
s),并且x
是十进制数。
例如:
C89版本:
#include <limits.h>
void get_bin(int *dst, int x)
{
int i;
for (i = sizeof x * CHAR_BIT - 1; i >= 0; --i)
*dst++ = x >> i & 1;
}
C99版本:
/* C99 version */
#include <limits.h>
#include <stdint.h>
void get_bin(int *dst, intmax_t x)
{
for (intmax_t i = sizeof x * CHAR_BIT - 1; i >= 0; --i)
*dst++ = x >> i & 1;
}
它的工作原理如下:我们x
从左到右遍历 的二进制表示。该表达式(sizeof x * CHAR_BIT - 1)
给出了 - 1 的位数x
。然后,我们得到每个位的值 ( *dst++ = x >> i & 1
),并将其推入数组。
使用示例:
void get_bin(int *dst, int x)
{
int i;
for (i = sizeof x * CHAR_BIT - 1; i >= 0; --i)
*dst++ = x >> i & 1;
}
int main(void)
{
int buf[128]; /* binary number */
int n = 42; /* decimal number */
unsigned int i;
get_bin(buf, n);
for (i = 0; i < sizeof n * CHAR_BIT; ++i)
printf("%d", buf[i]);
return 0;
}
使用在这里char * itoa ( int value, char * str, int base );
查找更多...
该功能应该是这样的:
int dec2bin(int n){
static int bin,osn=1,c;
if(n==0) return 0;
else {
c=n%2;
bin += c*osn;
osn*=10;
dec2bin(n/2);
}
return bin;
}
据我所知,任何 C 库中都没有这样的功能。但这里有一个递归函数,它以 int 形式返回十进制数的二进制表示:
int dec2bin(int n)
{
if(n == 0) return 0;
return n % 2 + 10 * dec2bin(n / 2);
}
由于int数据类型限制,它可以表示的最大数字为 1023(二进制为 1111111111),但您可以将int替换为long long数据类型以增加范围。然后,您可以像这样将返回值存储到数组中:
int array[100], i = 0;
int n = dec2bin(some_number);
do{
array[i] = n % 10;
n /= 10;
i++;
}while(n > 10)
我知道这是一个旧帖子,但我希望这仍然对某人有所帮助!
如果有帮助,您可以使用 bitset 库将任何十进制转换为二进制,例如:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main(){
int decimal = 20;
bitset<5> binary20(decimal);
cout << binary20 << endl;
return 0;
}
所以,你有一个像10100这样的输出。位集也有一个“ toString() ”方法用于任何目的。