c++ - 大负数乘以 -1 给出输出负数 C++

标签 c++ multiplication

为什么这个程序的输出是-2147483648?

#include <iostream>
using namespace std;

int main() {
    long long a=-2147483648;
    a=a*-1;
    cout<<a;
    return 0;
}

它应该是 2147483648 因为它在 long long 范围内。为什么标志没有变化?我什至尝试过 abs() 函数,但结果是一样的。

另外更令人惊讶的是,这个程序输出了2147483648:

#include <iostream>
using namespace std;

int main() {
    long long a=-2147483648;
    a=a*-1;
    a=a*-1;
    cout<<a;
    return 0;
} 

第二次,乘以 -1 成功了。如果重要的话,我使用的是 C++ 4.8.1。

最佳答案

启用-Wall,您会看到答案。

foo.C:5: warning: this decimal constant is unsigned only in ISO C90

使用 -2147483648LL 代替常量。

关于c++ - 大负数乘以 -1 给出输出负数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20334607/

相关文章:

c - 有符号和无符号整数乘法

multiplication - 伽罗瓦域的快速求幂

python - 应用于列表的乘法运算符(数据结构)

c++ - 即使调用 InitializeGL() 也无法禁用旧的 OpenGL 灯光

c++ - 更改权限的自修改代码问题

bit-manipulation - 如何使用按位运算符执行乘法?

r - 如何将标量值乘以 R data.frame 中的多个列?

c++ - 为什么 printf() 将 float 提升为 double ?

c++ - 当 GCC 明确表示会减慢程序速度时,为什么要在 O2/O3 处启用优化?

c++ - 将 std::vector<unsigned int> 解释为 bitvector - 高效算法?