c++ - 整数溢出和整数限制

标签 c++ integer overflow limits

我是新手,请帮助我理解 INTEGER OVERFLOW 并在以下示例的上下文中使用 INTEGER LIMITS。 我无法解释以下代码的输出。 我考虑了三种情况,直接打印 , 整数和 unsigned long long integer。

#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; 未定义的行为(溢出有符号整数)

关于c++ - 整数溢出和整数限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36618487/

相关文章:

sql - 将 SQL FLOAT 转换为 SQL INT,丢失数据

html - 使用 SVG 禁用 div 的滚动

css - 如何在 IE7 中阻止父 div 拉伸(stretch)

c++ - 混合 C 和 C++ 代码的静态分析怪异符号行为

c - += 是什么意思?

java - 返回包含字符串形式整数的字符串数组,用文本字符串替换某些数字的倍数

css - 隐藏滚动条但与父 div 一起滚动

c++ - 获取停靠 MFC CDockablePane 的停靠区域

c++ - 在 C++ 中使用 'static_cast' 向下转换

c++ - 重载赋值运算符 C++