大的负数乘以-1得到负的输出c++
large negative number multiplied by -1 gives output negative c++
为什么这个程序的输出是-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
代替常量。
在声明末尾添加'll':
long long a=-2147483648ll;
我在IDEONE上检查了这一点,发现了问题并验证了修复方法。问题是,您的常量值超过了默认int的常量值,因此您必须键入它(只要长度)才能获得所需的常量。
您可能需要将常量限定为:-2147483648LL
-C++11应该自动将其升级为long long
。再说一遍,long long
在C++03中不是标准的。
问题是最小负值为-2147483648,而最大正值为2147483647。请注意两个数字中的最后一个数字。:)因此,值2147483648不能用长-长类型表示,但可以用无符号长-长型表示。例如,函数abs()也存在同样的问题。
当我用g++4.8.1编译它时,它会警告:
warning: this decimal constant is unsigned only in ISO C90
这似乎表明您使用的类型是无符号的。您可以通过在相乘之前输出a
的值来确认这一点。使用-std=c++11
编译时,使用的类型是有符号的,并且它的行为与您预期的一样。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- 将值从二维数组输出到文本文件
- 集合上的输出迭代器:assign和increment迭代器
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 为什么rk4.do_step不输出C++中的初始条件
- 输出没有重复元素的动态数组(收缩数组)C++
- 如何根据单词在文本中出现的概率输出单词