J'ai écrit un programme pour convertir décimal en binaire à des fins de pratique, mais j'ai une sortie étrange. Lorsque je fais un modulo avec un nombre décimal, j'obtiens une valeur correcte mais qu'est-ce qui va dans le tableau est une barre oblique? J'utilise char array pour pouvoir utiliser simplement la sortie avec cout < <.Decimal to Binary, sortie étrange
// web binary converter: http://mistupid.com/computers/binaryconv.htm
#include <iostream>
#include <math.h>
#include <malloc.h> // _msize
#include <climits>
#define WRITEL(x) cout << x << endl;
#define WRITE(x) cout << x;
using std::cout;
using std::endl;
using std::cin;
char * decimalToBinary(int decimal);
void decimal_to_binary_char_array();
static char * array_main;
char * decimalToBinary(int decimal) // tied to array_main
{
WRITEL("Number to convert: " << decimal << "\n");
char * binary_array;
int t = decimal, // for number of digits
digits = 0, // number of digits
bit_count = 0; // total digit number of binary number
static unsigned int array_size = 0;
if(decimal < 0) { t = decimal; t = -t; } // if number is negative, make it positive
while(t > 0) { t /= 10; digits++; } // determine number of digits
array_size = (digits * sizeof(int) * 3); // number of bytes to allocate to array_main
WRITEL("array_size in bytes: " << array_size);
array_main = new char[array_size];
int i = 0; // counter for number of binary digits
while(decimal > 0)
{
array_main[i] = (char) decimal % 2 + '0';
WRITE("decimal % 2 = " << char (decimal % 2 + '0') << " ");
WRITE(array_main[i] << " ");
decimal = decimal/2;
WRITEL(decimal);
i++;
}
bit_count = i;
array_size = bit_count * sizeof(int) + 1;
binary_array = new char[bit_count * sizeof(int)];
for(int i=0; i<bit_count+1; i++)
binary_array[i] = array_main[bit_count-1-i];
//array_main[bit_count * sizeof(int)] = '\0';
//WRITEL("\nwhole binary_array: "); for(int i=0; i<array_size; i++) WRITE(binary_array[i]); WRITEL("\n");
delete [] array_main;
return binary_array;
}
int main(void)
{
int num1 = 3001;
// 3001 = 101110111001
// 300 = 100101100
// 1000 = 1111101000
// 1200 = 10010110000
// 1000000 = 11110100001001000000
// 200000 = 110000110101000000
array_main = decimalToBinary(num1);
WRITEL("\nMAIN: " << array_main);
cin.get();
delete [] array_main;
return 0;
}
La sortie:
Number to convert: 3001
array_size in bytes: 48
decimal % 2 = 1/1500
decimal % 2 = 0 0 750
decimal % 2 = 0 0 375
decimal % 2 = 1 1 187
decimal % 2 = 1/93
decimal % 2 = 1 1 46
decimal % 2 = 0 0 23
decimal % 2 = 1 1 11
decimal % 2 = 1 1 5
decimal % 2 = 1 1 2
decimal % 2 = 0 1 1
decimal % 2 = 1 1 0
MAIN: 1111101/100/
Quels sont les barres obliques en sortie (1111101/100 /)?
Une chose que vous pourriez penser, c'est que la valeur de la variable 'decimal' est déjà en binaire. Lorsque vous l'affichez à l'écran, l'opérateur '' de '' 'de' de 'de' est en train de le convertir en base 10 à des fins d'affichage, en utilisant presque exactement la même routine que vous utilisez pour l'afficher en base 2. Non cela affectera votre solution, lors de l'utilisation de nombres entiers, mais lorsque vous travaillez avec des valeurs à virgule flottante, cela s'affiche. – Eclipse
Eclipse: Puis-je utiliser cout << pour afficher le nombre en binaire car il est déjà binaire, avec un modificateur de format? setf (???)? Ou cout << hex pour le mode hexadécimal? –