十进制转换为二进制用C(Convert decimal to binary in C)

2019-07-18 03:08发布

我想一个十进制转换为二进制,例如192至11000000我只需要一些简单的代码来做到这一点,但我到目前为止的代码无法正常工作:

void dectobin(int value, char* output)
{
    int i;
    output[5] = '\0';
    for (i = 4; i >= 0; --i, value >>= 1)
    {
        output[i] = (value & 1) + '0';
    }
}

任何帮助将非常感激!

Answer 1:

该值不是小数。 在计算机的内存中的所有值都是二进制的。

你所要做的是为INT转换为使用特定基地的字符串。 有该功能,这就是所谓的itoa 。 http://www.cplusplus.com/reference/cstdlib/itoa/



Answer 2:

首先, 192不能在被表示4

192 = 1100 0000其所需的最低8位。

下面是一个简单的C程序,以十进制数系统转换为二进制数字系统

#include <stdio.h>  
#include <string.h>  

int main()  
{  
    long decimal, tempDecimal;  
    char binary[65];  
    int index = 0;  

    /* 
     * Reads decimal number from user 
     */  
    printf("Enter any decimal value : ");  
    scanf("%ld", &decimal);  

    /* Copies decimal value to temp variable */  
    tempDecimal = decimal;  

    while(tempDecimal!=0)  
    {  
        /* Finds decimal%2 and adds to the binary value */  
        binary[index] = (tempDecimal % 2) + '0';  

        tempDecimal /= 2;  
        index++;  
    }  
    binary[index] = '\0';  

    /* Reverse the binary value found */  
    strrev(binary);  

    printf("\nDecimal value = %ld\n", decimal);  
    printf("Binary value of decimal = %s", binary);  

    return 0;  
} 


Answer 3:

5位数字是不够的,你的例子(192)。 也许你应该增加output



Answer 4:

前几天,我在寻找这样的快速和简便的方式sprintf("%d", num) 发现在页面此实现itoa与海湾合作委员会 :

/**
 * C++ version 0.4 char* style "itoa":
 * Written by Lukás Chmela
 * Released under GPLv3.

 */
char* itoa(int value, char* result, int base) {
    // check that the base if valid
    if (base < 2 || base > 36) { *result = '\0'; return result; }

    char* ptr = result, *ptr1 = result, tmp_char;
    int tmp_value;

    do {
        tmp_value = value;
        value /= base;
        *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)];
    } while ( value );

    // Apply negative sign
    if (tmp_value < 0) *ptr++ = '-';
    *ptr-- = '\0';
    while(ptr1 < ptr) {
        tmp_char = *ptr;
        *ptr--= *ptr1;
        *ptr1++ = tmp_char;
    }
    return result;
}


Answer 5:

这里是一个十进制转换成二进制数的算法

  • 除以2输入十进制数,并存储所述剩余部分。
  • 存储商回输入数字变量。
  • 直到商为零重复此过程。
  • 等效二进制数将是在相反的顺序上述过程的剩余部分。

你可以在这里查看C程序http://www.techcrashcourse.com/2015/08/c-program-to-convert-decimal-number-binary.html



Answer 6:

它看起来是这样,但要小心,你必须扭转生成的字符串:-)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char output[256]="";

int main()
{
int x= 192;
int n;
n = x;
int r;
do {
r = n % 2;
if (r == 1)
   strcat(output,"1");
else strcat(output,"0");
n = n / 2;
}
while (n > 0);

printf("%s\n",output);
}


Answer 7:

所以......你检查你的代码的输出,以了解为什么它不工作?

So iteration 1 of your loop:
value = 192
i = 4
output[i] = (11000000 & 1) + '0' = 0 + 48 = 48 (char `0`)

Iteration 2 of your loop:
value = 96
i = 3
output[i] = (1100000 & 1) + '0' = 0 + 48 = 48 (char `0`)

Iteration 3 of your loop:
value = 48
i = 2
output[i] = (110000 & 1) + '0' = 0 + 48 = 48 (char `0`)

Iteration 4 of your loop:
value = 24
i = 1
output[i] = (11000 & 1) + '0' = 0 + 48 = 48 (char `0`)

Iteration 5 of your loop:
value = 12
i = 0
output[i] = (1100 & 1) + '0' = 0 + 48 = 48 (char `0`)

Final string: "00000"  and you wanted: "11000000"

看到什么你的代码错误? 不。 我也不你只是没有走得足够远。 改变你的输出/环路:

output[8] = '\0';
for (i = 7; i >= 0; --i, value >>= 1)

然后你就会有正确的结果返回。

我会建议只是一个更通用的方法,您使用的是固定长度的字符串,这限制你一个certian长度的二进制数。 你可能想这样做:

loop while number dividing down is > 0
count number of times we loop
malloc an array the correct length and be returned


Answer 8:

#include <stdio.h>
#include <stdlib.h>
void bin(int num) {
    int n = num;
    char *s = malloc(sizeof(int) * 8);
    int i, c = 0;
    printf("%d\n", num);

    for (i = sizeof(int) * 8 - 1; i >= 0; i--) {
        n = num >> i;
        *(s + c) = (n & 1) ? '1' : '0';
        c++;
    }
    *(s + c) = NULL;
    printf("%s", s); // or you can also return the string s and then free it whenever needed
}

int main(int argc, char *argv[]) {
    bin(atoi(argv[1]));
    return EXIT_SUCCESS;
}


Answer 9:

您可以使用while循环下的功能也做到这一点。 我只是在寻找的解决我的,但我得到的解决了不适合的,所以我也相应做了它的实用方法(分使用2直到获得0和存储阵列中的提示),并打印阵列和倒档共享这里

#include <stdio.h>

    int main()
    {
        long long int a,c;
        int i=0,count=0;
        char bol[10000];
        scanf("%lld", &a);
        c = a;
        while(a!=0)
        {
            bol[i] = a%2;
            a = a / 2;
            count++;
            i++;
        }
        if(c==0)
        {
            printf("0");
        }
        else
        {
            for(i=count-1; i>=0; i--)
            {
                printf("%d", bol[i]);
            }
        }
        printf("\n");
        return 0;
    }


Answer 10:

// C程序转换成十进制使用堆栈成二进制

#include<stdio.h>

#define max 100

int stack[max],top=-1,i,x;  


void push (int x)
{
  ++top;
  stack [top] = x;
}

int pop ()
{ 
   return stack[top];
}   


void  main()
{
  int num, total = 0,item;
  print f( "Please enter a decimal: ");
  scanf("%d",&num);
  while(num > 0)
  {  
    total = num % 2;
    push(total);
    num /= 2;
  }



 for(i=top;top>-1;top--)
 {     
     item = pop ();
     print f("%d",item);
 }

 }


Answer 11:

十进制转换为二进制的C语言

#include<stdio.h>
void main()
{
    long int n,n1,m=1,rem,ans=0;
    printf("\nEnter Your Decimal No (between 0 to 1023) :: ");
    scanf("%ld",&n);

    n1=n;
    while(n>0)
    {
        rem=n%2;
        ans=(rem*m)+ans;
        n=n/2;
        m=m*10;
    }

    printf("\nYour Decimal No is   :: %ld",n1);
    printf("\nConvert into Binary No is :: %ld",ans);
}


Answer 12:

number=215
a=str(int(number//128>=1))+str(int(number%128>=64))+
str(int(((number%128)%64)>=32))+str(int((((number%12
8)%64)%32)>=16))+str(int(((((number%128)%64)%32)%16)>=8))
+str(int(((((((number%128)%64)%32)%16)%8)>=4)))
+str(int(((((((((number%128)%64)%32)%16)%8)%4)>=2))))
+str(int(((((((((((number%128)%64)%32)%16)%8)%4)%2)>=1)))))
print(a)

你也可以用“如果”,“别人”,语句来写这段代码。



Answer 13:

这是做的最简单方法

#include <stdio.h>

void main()
{
    int n,i,j,sum=0;
    printf("Enter a Decimal number to convert it to binary : ");
    scanf("%d",&n);
    for(i=n,j=1;i>=1;j*=10,i/=2)
        sum+=(i%2)*j;
    printf("\n%d",sum);
}


Answer 14:

也许理解算法将允许你写或修改自己的代码,以满足您的需要。 我看到你没有足够的字符数组的长度虽然显示为192的二进制值(你需要8位二进制的,但你的代码只给出了5个二进制数字)

这里有一个页面清晰阐述的算法。

我不是一个C / C ++程序员,所以这里是我的C#代码基础上的算法的例子贡献。

int I = 0;
int Q = 95;
string B = "";
while (Q != 0)
{
    Debug.Print(I.ToString());
    B += (Q%2);
    Q = Q/2;
    Debug.Print(Q.ToString());
    I++;
}

Debug.Print(B);

所有Debug.Print只是为了显示输出。



Answer 15:

//decimal to binary converter
long int dec2bin(unsigned int decimal_number){
  if (decimal_number == 0)
    return 0;
  else
    return ((decimal_number%2) + 10 * dec2bin(decimal_number/2));
}


Answer 16:

int main() 
{ 
 int n, c, k;
 printf("Enter an integer in decimal number system: ");
 scanf("%d", &n);
 printf("%d in binary number system is: ", n);
 for (c = n; c > 0; c = c/2) 
  {
   k = c % 2;//To
   k = (k > 0) ? printf("1") : printf("0");
  }
 getch();
 return 0; 
}


文章来源: Convert decimal to binary in C
标签: c binary decimal