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

hwazgwia  于 2022-12-17  发布在  其他
关注(0)|答案(3)|浏览(191)

写一个函数int* dec 2bin(int N,int* n),给定一个自然数0 ≤ N〈65535,计算并返回它的二进制表示,程序必须确定系数ai ∈ {0,1},i = 0,...,n − 1,使得N =(sum-〉n-1)ai2^i(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;
}

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

yshpjwxd

yshpjwxd1#

另一种方式...
这是为了打印一个值的二进制表示(从左到右),而不是打印,你可以简单地把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;
}
hgqdbh6s

hgqdbh6s2#

使用能够对十进制数1111_1111_1111_1111进行编码的整数类型:使用long 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("%lld\n", decimalToBinary(N));
goqiplq2

goqiplq23#

您的函数没有所需的参数和返回值。

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

相关问题