你能解释一下为什么这不起作用:
#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()特定任务的硬编码功能.我想做的就是制作一个程序,可以显示数据类型的大小,以及它的范围(位范围或其他东西,是吗?)
如果你愿意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位机器上).