c++ - 十进制转二进制,奇怪的输出

标签 c++ binary new-operator

出于练习目的,我编写了将十进制转换为二进制的程序,但我得到了一些奇怪的输出。当用十进制数取模时,我得到了正确的值,但是数组中的内容是正斜杠?我正在使用 char 数组,以便能够仅使用带有 cout <<.

的输出
// 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;
}

输出:

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/

输出中的正斜杠是什么 (1111101/100/)?

最佳答案

你的问题在这里:

array_main[i] = (char) decimal % 2 + '0';

您正在将 decimal 转换为 char 并且它会擦掉高位,因此在某些情况下它会变成负数。应用于负数的 % 是负数,因此在 ASCII 图表中,您在 0 之前得到一个字符,即 /

我还想说,我认为您的宏 WRITELWRITE 属于预处理器滥用。 :-)

关于c++ - 十进制转二进制,奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3248456/

相关文章:

c++ - 这是对 shared_ptr 的适当使用吗?

C++线程分离进程

c# - 弄清楚这个日期格式

c++ - 为什么将对象地址存储在缓冲区中会在实例化和删除它们时导致内存泄漏?

javascript - 我们可以在使用 "new"运算符创建对象时省略括号吗?

c++ - 如何从另一个登录用户启动登录用户内部的应用程序?

c++ - 从字符串中删除字符

python - 将二进制 (0|1) numpy 转换为整数或二进制字符串?

c++ - 从 char 数组末尾读取 4 个字节

c++ - 是否应该经常检查新运算符(operator)是否工作?