Десятичное в двоичное преобразование - PullRequest
1 голос
/ 24 апреля 2011

Я писал функцию для преобразования между десятичной и двоичной системами счисления, и вот мой оригинальный код:

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];
}

Однако, пока я не сделал это, он не работал:

while(number)

что не так с

while(number == true)

и в чем разница между двумя формами?Заранее спасибо.

Ответы [ 2 ]

8 голосов
/ 24 апреля 2011

Когда вы говорите while (number), number, то есть int, преобразуется в тип bool.Если он равен нулю, он становится false, а если он ненулевой, он становится true.

Когда вы говорите while (number == true), true преобразуется в int (чтобы стать 1) и это так же, как если бы вы сказали while (number == 1).

0 голосов
/ 03 февраля 2012

Вот мой код ....

    #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;
   }
...