数据类型问题

-1 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

cas*_*nca 6

如果你愿意2^32,你应该每次乘以2.您的代码每次乘以32,因此您最终会获得更大的值.

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

x = 1;
for (i = 0; i < 8 * n; i++)
  x = x * 2;
return x;
Run Code Online (Sandbox Code Playgroud)

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

return ~0;
Run Code Online (Sandbox Code Playgroud)

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