我是新来的,如果这是最基本的,我真的很抱歉,但我在这里错过了什么?这只是一个虚拟代码:
#include <iostream>
using namespace std;
int main() {
unsigned int a, b, c;
int d;
a = 10E06;
b = 25E06;
c = 4096;
d = (a - b)/c;
std::cout << d << std::endl;
return 0;
}
cout 正在打印 1044913 而不是 -3662。如果我将 a 和 b 转换到 long 问题就解决了。是不是有溢出之类的问题?
最佳答案
那是因为 (a-b)
本身是无符号的:
#include <iostream>
using namespace std;
int main() {
unsigned int a, b, c;
int d;
a = 10E06;
b = 25E06;
c = 4096;
d = (a - b)/c;
std::cout << (a-b) << std::endl; // 4279967296
std::cout << d << std::endl; // 1044913
return 0;
}
从 unsigned
到 int
的转换发生在 d
被分配给时,而不是之前。
所以 (a-b)/c
必须是无符号的,因为 a,b,c
是。
关于c++ - C++ 中的整数除法没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21103796/