C++ 数据类型问题

C++ 数据类型问题,c++,c,types,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 &l

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

#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;
}
#包括
使用名称空间std;
双数据转换(int n);
内部主(空){

cout如果你想要
2^32
,你应该每次乘以2。你的代码每次乘以32,所以你会得到一个更大的值

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

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

将为您提供2^32-1=4294967295(在32位机器上)。

我不知道您在做什么,但您的意思是
x=x*2

基本上,您将输入乘以8,然后再乘以32,32倍

我不明白那会让你干什么

如果希望x字节数的无符号整数范围,则应使用以下计算:

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


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

我想,向需要测试的任何整数数据类型添加强制转换都应该有效。很好,难怪我高中数学不及格。非常感谢
~0
是错误的。首先,你假设你的整数用2的补码表示,但它们不能。即使如此,OP要查找的数字也不能表示le作为一个
int
,但只有作为一个
无符号int
(无符号)-1
才是始终有效的答案。在二的补码中,你给出的数字是(int)-1。@Jens Gustedt:同意,我从来没有考虑过非二的补码计算机。:)
return ~0;