整数溢出和整数限制
Integer overflow and integer limits
我是一名新手,请帮助我理解INTEGER OVERFLOW以及在以下示例中使用INTEGER LIMITS。我无法解释以下代码的输出。我考虑了三种情况,直接打印,整数和无符号长整型。
#include<iostream>
#include<limits.h>
using namespace std;
int main()
{
int tmp1=0,tmp2=0,tmp3=0,tmp4=0;
unsigned long long temp1=0,temp2=0,temp3=0,temp4=0;
cout<<"Directly printing"<<endl;
cout<<-2*INT_MIN<<endl<<2*INT_MIN<<endl<<-2*INT_MAX<<endl<<2*INT_MAX<<endl;
cout<<"Using integer"<<endl;
tmp1 = -2*INT_MIN;
tmp2 = 2*INT_MIN;
tmp3 = -2*INT_MAX;
tmp4 = 2*INT_MAX;
cout<<temp1<<endl<<tmp2<<endl<<tmp3<<endl<<tmp4<<endl;
cout<<"Using unsigned long long variables"<<endl;
temp1 = -2*INT_MIN;
temp2 = 2*INT_MIN;
temp3 = -2*INT_MAX;
temp4 = 2*INT_MAX;
cout<<temp1<<endl<<temp2<<endl<<temp3<<endl<<temp4;
}
输出:
Directly printing
0
0
2
-2
Using integer
0
0
2
-2
Using unsigned long long variables
0
0
2
18446744073709551614
tmp1 = -2*INT_MIN;
未定义行为,除非INT_MAX的大小是INT_MIN的两倍(不会)。
tmp2 = 2*INT_MIN;
未定义行为(溢出有符号整数)
tmp3 = -2*INT_MAX;
未定义的行为,除非INT_MIN的大小是INT_MAX的两倍(不会)。
tmp4 = 2*INT_MAX;
未定义行为(溢出有符号整数)
temp1 = -2*INT_MIN;
未定义行为(溢出有符号整数)
temp2 = 2*INT_MIN;
未定义行为(溢出有符号整数)
temp3 = -2*INT_MAX;
未定义行为(溢出有符号整数)
temp4 = 2*INT_MAX;
未定义行为(溢出有符号整数)
相关文章:
- 整数溢出,最大值为 pow(10,19)
- 模函数,避免C++整数溢出
- 优化正在杀死我在 clang 6 中的整数溢出检查
- 从双精度转换为整数的显式类型是否始终检查整数溢出?
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- 我很难理解这些关于检测整数溢出的评论
- 检测 32 位整数溢出
- 如何在没有整数溢出的情况下找到n%(k*k)
- C 中俄罗斯农民算法中的整数溢出
- 检查Android NDK COD中的整数溢出
- 对于特定情况的整数溢出似乎是由整数溢出引起的错误
- 如何修复整数溢出警告
- 整数溢出 C++ 即使使用“无符号长整型”也是如此
- 整数溢出是否会影响其他变量
- 为什么功能不给整数溢出
- 有符号整数溢出、内部函数和未定义的行为
- 整数溢出不会发生:它们从0重新启动
- 以下程序中最大 int 1000 000(在 int 范围内)的整数溢出
- 为什么Turbo C Wraparound每次签名的整数溢出,尽管签名的整数溢出是不确定的
- 编译器是否有可能检测整数溢出或其他数据类型溢出的可能性