数据类型问题

时间:2010-09-07 16:34:39

标签: c++ c types

你能解释一下为什么这不起作用:

#include <iostream>
using namespace std;

double data_convert(int n);

int main(void) {
    cout << data_convert(sizeof(int));
}

double data_convert(int n) {
    int i;
    double x;

    x = 8 * n;
    for(i = 0; i < 32; i++)
        x = x * 32;
    return x;
}

我尝试使用来自cmath的pow,但我得到了相同的结果。显然,这输出“4.67681e + 049”。它应该输出的位置(使用Windows计算器)“4294967296”。

for循环是我自己的特定任务的硬编码pow()函数。我想做的就是创建一个程序,它可以显示数据类型的大小,以及它的范围(位范围或其他东西,是吗?)

3 个答案:

答案 0 :(得分:6)

如果您需要2^32,则每次应乘以2。您的代码每次乘以32,因此您最终会获得更大的值。

此外,您的x值应从1开始。8 * n实际上是整数中的位数,因此应该是循环的上限:

x = 1;
for (i = 0; i < 8 * n; i++)
  x = x * 2;
return x;

一个更简单的方法是按位取反0,它将为您提供最大可能的整数:

return ~0;

会给你2 ^ 32 - 1 = 4294967295(在32位机器上)。

答案 1 :(得分:1)

基本上,您将输入乘以8,然后将其乘以32,32次。

我不明白为什么会让你这么做。

如果你想要x个字节数的无符号整数范围,你应该使用这个计算:

最大数量= 2 ^(字节* 8) - 1

所以在循环中它应该乘以2直到我从0变为字节* 8并停在那里(所以它在到达字节之前结束* 8)

答案 2 :(得分:0)

我不确定你在做什么,但你不是指x = x*2吗?