c++ - C++ 中的整数除法没有按预期工作

标签 c++

我是新来的,如果这是最基本的,我真的很抱歉,但我在这里错过了什么?这只是一个虚拟代码:

#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;
}

unsignedint 的转换发生在 d 被分配给时,而不是之前。

所以 (a-b)/c 必须是无符号的,因为 a,b,c 是。

关于c++ - C++ 中的整数除法没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21103796/

相关文章:

c++ - Visual Studio 2015 社区 - 'Visual C++ Project System Package' 错误

c++ - 使用 OpenCV 将 YUV 转换为有损压缩

c++ - 未解析的外部符号虽然它已经被定义

c++ - 猜数字游戏

C++:Linux:从 `cout` 以外的多个线程或流通过管道传输到我的程序

c++ - 如何阻止 EnumWindows 无限运行 win32

c++ - 像 `float[10][10]` 这样初始化的数组是否已针对 SIMD/SSE 进行内存对齐?

C++:Boost program_options:多个参数列表

c++ - 当不需要完整计算时从某种方法提前返回

c++ - 如何解决传递给 boost 线程的函数中的歧义