为什么在 C++ 中以 64 位编译时会出现 32 位溢出?
Why do I get a 32-bit overflow when compiling in 64-bit in C++?
所以,我决定测试一个新的 C++ 龟式图形库。我决定通过制作斐波那契螺旋来测试它。但是,在 运行 程序上,它停在中间。我查了一下是怎么回事,斐波那契数倒转为-2147483647,好像是32位编译的。有人可以帮忙吗?我在 Windows 上用 g++ 编译了它。
注意:我使用向量来存储值。
这是我的代码:
//Includes and namespaces
#include "Cturtle.hpp"
#include<iostream>
namespace ct = cturtle;
std::vector<long int> fibonacci = {1, 2}; //This vector stores the fib sequence
ct::TurtleScreen scr; //Create a new Screen
ct::Turtle turtle(scr); //Create a new turtle on the screen
int main() {
turtle.speed(ct::TS_FASTEST); //Set the turtle's speed to max
while(true) {
for(int i = 0; i < fibonacci.back(); i++) {
fibonacci.push_back(fibonacci.back() + fibonacci.back()-1); //Add a new value to the fibonacci vector based off the previous two
std::cout << fibonacci.back() << '\n'; //This is here for debug
turtle.forward(1); //Move the turtle 1 step forward
turtle.right(90 / fibonacci.back()); //Turn according to 90 divided by the current fibonacci value
}
}
}
MinGW 使用 MSVC 友好的 LLP64 data model。
在 LLP64 中,int
和 long int
都是 32 位,与平台位数无关(32/64 位)。
要获得 64 位数据类型,请使用 long long
或 int64_t
。
例如std::vector<long long>
。还有这里:for(long long i = 0; ...
所以,我决定测试一个新的 C++ 龟式图形库。我决定通过制作斐波那契螺旋来测试它。但是,在 运行 程序上,它停在中间。我查了一下是怎么回事,斐波那契数倒转为-2147483647,好像是32位编译的。有人可以帮忙吗?我在 Windows 上用 g++ 编译了它。 注意:我使用向量来存储值。 这是我的代码:
//Includes and namespaces
#include "Cturtle.hpp"
#include<iostream>
namespace ct = cturtle;
std::vector<long int> fibonacci = {1, 2}; //This vector stores the fib sequence
ct::TurtleScreen scr; //Create a new Screen
ct::Turtle turtle(scr); //Create a new turtle on the screen
int main() {
turtle.speed(ct::TS_FASTEST); //Set the turtle's speed to max
while(true) {
for(int i = 0; i < fibonacci.back(); i++) {
fibonacci.push_back(fibonacci.back() + fibonacci.back()-1); //Add a new value to the fibonacci vector based off the previous two
std::cout << fibonacci.back() << '\n'; //This is here for debug
turtle.forward(1); //Move the turtle 1 step forward
turtle.right(90 / fibonacci.back()); //Turn according to 90 divided by the current fibonacci value
}
}
}
MinGW 使用 MSVC 友好的 LLP64 data model。
在 LLP64 中,int
和 long int
都是 32 位,与平台位数无关(32/64 位)。
要获得 64 位数据类型,请使用 long long
或 int64_t
。
例如std::vector<long long>
。还有这里:for(long long i = 0; ...