在c语言中使用指针将十进制转换为二进制



写一个函数int* dec2bin(int N, int* N),给定一个自然数0≤N <65535,计算并返回它在二进制数字系统中的表示形式。程序必须确定系数ai∈{0,1},i = 0,…, n−1,n =(总→n - 1) ai2 ^我(n≤16)。

#include <stdio.h>
#include <math.h>
#include <assert.h>
int decimalToBinary(int N)
{
int B_Number = 0;
int c= 0;
int ctr=0;
while (N != 0) {
int rem = N % 2;
c = pow(10, ctr);
B_Number += rem * c;
N /= 2;
ctr++;
}
return B_Number;
}

int main()
{
int N;
scanf("%d", &N);
printf("%d", decimalToBinary(N));
return 0;
}

我知道如何编写一个转换数字的程序,但我不明白为什么需要指针以及如何实现它。

另一种方式…
写入print值的二进制表示形式(从左到右)。除了打印,您可以简单地将0/1(从左到右)赋值给传递的数组(包含16个整数),然后将赋值的整数数返回给调用函数,以便从循环中打印它们。

int main() {
for( int i = 253; i <= 258; i++ ) {
printf( "Decimal %d: ", i );
unsigned int bitmask = 0;
bitmask = ~bitmask;
bitmask &= ~(bitmask >> 1); // High bitmask ready
// skip over leading 0's (optional)
while( bitmask && (bitmask & i) == 0 ) bitmask >>= 1;
// loop using bitmask to output 1/0, then shift mask
do {
putchar( (bitmask & i) ? '1' : '0' );
} while( (bitmask >>= 1) != 0 );
putchar( 'n' );
}
return 0;
}

使用能够编码十进制数1111_1111_1111_1111_1111的整数类型:Uselong long.

不要使用pow(),一个浮点函数来解决整数问题。它可能生成的值略小于期望的整数,并且速度很慢。

long long decimalToBinary_alt(int N) {
long long B_Number = 0;
long long power = 1;
while (N != 0) {
int rem = N % 2;  // result: -1, 0, or 1
B_Number += rem * power;
N /= 2;
power *= 10;  // Scale the power of 10 for the next iteration.
}
return B_Number;
}

使用

printf("%lldn", decimalToBinary(N));

您的函数没有必要的参数和返回值。

int* dec2bin(int N, int* n)
{
unsigned uN = N;

for(int bit = 15; bit >= 0; bit--)
{
*(n + 15 - bit) = !!(uN & (1U << bit));
}
return n;
}