是否可以从unsigned char数据类型函数返回一个整数到main函数?

时间:2016-10-12 22:31:48

标签: c++ overloading

我有这个unsigned char sumBinaryFigure 函数,它计算unsigned long long数字的二进制表示的数字之和。当我从main函数调用此函数时,对于unsigned long long,它应该返回一个整数(或其他数值数据类型),尽管函数的数据类型是unsigned char。可能吗?我试过一个函数重载,它没有用。如果听起来很荒谬,那不是我的错。

unsigned char sumBinaryFigure(unsigned long long number)
{
  unsigned int S = 0;   

  while (number)
  {
    S += number % 2;
    number /= 2;
  }

return S;
}

2 个答案:

答案 0 :(得分:3)

  

当我从main函数调用此函数时,对于unsigned long long,它应该返回一个整数,尽管该函数的数据类型是unsigned char。有可能吗?

是。这个问题并不荒谬,C类型只是令人困惑。 unsigned charint都代表整数。

您的代码是正确的。

unsigned char是一个1字节的数据类型。它可用于表示字母,也可用于表示数字。

以下陈述是等效的。

unsigned char ch = 'A';
unsigned char ch = 65;

无论您使用unsigned char作为字符还是整数,机器都不关心。

char不一定包含字符。它也代表小数字

sumBinaryFigure的发布实现返回0-255范围内的数字,没有错。因为long long几乎肯定小于256位,所以您不必担心unsigned char不够大。

如果我可以建议对您的程序进行一次更改以减少混淆,请更改此行

unsigned int S = 0;  

到此......

unsigned char S = 0;

附录

为了清楚起见,请考虑以下代码。

int main (void) {
  char ch_num = 65;   // ch_num  is the byte 0100 0001
  char ch_char = 'A'; // ch_char is the byte 0100 0001

  printf ("%d\n", ch_num);  // Prints 65
  printf ("%d\n", ch_char); // Prints 65

  printf ("%c\n", ch_num);  // Prints A
  printf ("%c\n", ch_char); // Prints A
}

char是一个字节。除了我们强加于它之外,它是一系列没有任何意义的位。

该字节可以解释为数字或字符,但该决定取决于程序员。 %c格式说明符说“将其解释为字符。%d格式说明符说”将其解释为数字。“

是整数还是字符由输出函数决定,而不是数据类型。

答案 1 :(得分:1)

unsigned char可以转换为int,而不会缩小我能想到的所有平台。您不需要重载任何内容,只需将函数的结果分配给int变量:

int popcnt = sumBinaryFigure(1023);

事实上,考虑到函数语义,结果值无法适应int,保证至少为16位,这意味着最小{{ {1}}值为32767.您必须拥有能够存储超过32767个二进制数字的数据类型才能实现远程可能(大多数平台上的numeric_limits<int>::max()为32位)