2011-04-24 3 views
1

je en train d'écrire une fonction de conversion entre décimal et les systèmes numériques de base binaires et voici mon code d'origine:décimal à la conversion binaire

void binary(int number) 
{ 
    vector<int> binary; 

    while (number == true) 
    { 
     binary.insert(binary.begin(), (number % 2) ? 1 : 0); 
     number /= 2; 
    } 

    for (int access = 0; access < binary.size(); access++) 
     cout << binary[access]; 
} 

Il ne fonctionne cependant pas jusqu'à ce que je l'ai fait:

while(number) 

ce qui ne va pas avec

while(number == true) 

et quelle est la différence entre les deux formes? Merci d'avance.

Répondre

8

Lorsque vous dites while (number), number, qui est un int, est converti en type bool. Si c'est zéro, il devient false et s'il est différent de zéro, il devient true.

Quand vous dites while (number == true), le true est converti en un int (pour devenir 1) et il est le même que si vous aviez dit while (number == 1).

+0

Merci pour la clarification, je suis encore à apprendre et à la promotion de type me échappe parfois. –

0

Voici mon code ....

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 
#include<math.h> 
#include<unistd.h> 
#include<assert.h> 
#include<stdbool.h> 
#define max 10000 
#define RLC(num,pos) ((num << pos)|(num >> (32 - pos))) 
#define RRC(num,pos) ((num >> pos)|(num << (32 - pos))) 

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


    int main() 
    { 
    char s[50]; 
    tobinstr(65536,32, s); 
    printf("%s\n", s); 
    return 0; 
    }