C++ 为什么程序会这样做?C++;

C++ 为什么程序会这样做?C++;,c++,C++,所以我有密码 #include <iostream> using namespace::std; int main() { int a = 1; int b = 1; while (a < 100) { a = a + b; b = a + b; cout << a << endl; cout << b << endl; } } #

所以我有密码

#include <iostream>
using namespace::std;
int main() {
    int a = 1;
    int b = 1;
    while (a < 100) {
        a = a + b; 
        b = a + b;
        cout << a << endl;
        cout << b << endl;
    }
}
#包括
使用namespace::std;
int main(){
INTA=1;
int b=1;
而(a<100){
a=a+b;
b=a+b;

cout这称为

这称为

这可能发生在超过整数范围时(在Windows 32位上可能为2147483647)。尝试将类型更改为
long long
,然后查看是否可以在更大范围内获得更准确的结果。或者,您可以将add
unsigned
更改为该类型,因为fib.sequence是严格正的,因此这将使值的范围加倍

这取决于体系结构,但使用范围,您的范围将是:

int: [–2,147,483,648, 2,147,483,647]
unsigned int: [0, 4,294,967,295]
long long: [–9,223,372,036,854,775,808, 9,223,372,036,854,775,807]
unsigned long long: [0, 18,446,744,073,709,551,615]

编辑:完全脱离主题,但谢谢你让我超过1k,你们这些光荣的投票混蛋!

当你超过整数范围时,可能会发生这种情况(在Windows 32位上可能是2147483647)。尝试将类型更改为
long long
,然后查看是否可以在更大范围内获得更准确的结果。或者,您可以将add
unsigned
更改为该类型,因为fib.sequence是严格正的,因此这将使值的范围加倍

这取决于体系结构,但使用范围,您的范围将是:

int: [–2,147,483,648, 2,147,483,647]
unsigned int: [0, 4,294,967,295]
long long: [–9,223,372,036,854,775,808, 9,223,372,036,854,775,807]
unsigned long long: [0, 18,446,744,073,709,551,615]

编辑:完全脱离主题,但谢谢你让我超过1k,你这个光荣的投票混蛋!

当程序员选择一种数据类型时,例如
int
,程序员有责任确保存储的数字适合该数据类型。在典型的机器上,
int
可以容纳高达21.4亿的值。如果你选择当程序员选择一种数据类型时,例如
int
,程序员有责任确保存储的数字适合该数据类型。在典型的机器上,
int
可以保存高达21.4亿的值。如果你仔细检查,就会发现它是无意义的。

这里的问题是你R,因为您开始分配比C++中的INT大的值。例如,在微软编译器上,是2147483647。

为了直接支持这个,你可能需要某种形式,它支持任意大的整数值。

< P>这里的问题是,你的,因为你开始分配的值大于C++中的int值。例如,在微软编译器上,是2147483647。
为了直接支持这一点,您可能需要某种形式的,提供对任意大的整数值的支持。

您使用的是
int
,这意味着它是
32位整数
-现在通过一些数学(
2^32
),我们得出结论,您无法保存任何大于2147483647的值


试试
long
/
int64
-这应该足够了!

您使用的是
int
,这意味着它是一个
32位整数
-现在通过一些数学(
2^32
)我们得出结论,您无法保存任何大于2147483647的值


试试
long
/
int64
-这应该足够了!

100亿可能比您平台上的
int
表示的要大。您是否尝试过
long
,如果是C++11,
long
?100亿可能比您平台上的
int
表示的要大。您尝试过吗
long
如果是C++11,
long
?因为他不使用小数,所以他应该使用像int64(long-long)这样的东西。因为他不使用小数,所以他应该使用像int64(long-long)这样的东西