Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+中无符号的整数提升+; intmain(){ 无符号i=5; int j=-10; 双d=i+j; 长l=i+j; int k=i+j; std::cout_C++_Unsigned Integer - Fatal编程技术网

C++ c+中无符号的整数提升+; intmain(){ 无符号i=5; int j=-10; 双d=i+j; 长l=i+j; int k=i+j; std::cout

C++ c+中无符号的整数提升+; intmain(){ 无符号i=5; int j=-10; 双d=i+j; 长l=i+j; int k=i+j; std::cout,c++,unsigned-integer,C++,Unsigned Integer,执行算术运算符的过程涉及转换,以使两个值具有相同的类型。此过程的名称是查找公共类型,对于int和无符号int的情况,将调用转换。此术语不用于此特定情况 在i+j的情况下,int通过添加UINT_MAX+1转换为unsigned int。因此i+j的结果是UINT_MAX-4,在您的系统上是4294967291 然后将此值存储在各种数据类型中;唯一需要进一步解释的输出是k。值UINT\u MAX-4无法放入int。这称为超出范围赋值,结果值由实现定义。在您的系统上,它显然会赋值给int值,该值s与

执行算术运算符的过程涉及转换,以使两个值具有相同的类型。此过程的名称是查找公共类型,对于
int
无符号int
的情况,将调用转换。此术语不用于此特定情况

i+j
的情况下,
int
通过添加
UINT_MAX+1
转换为
unsigned int
。因此
i+j
的结果是
UINT_MAX-4
,在您的系统上是
4294967291

然后将此值存储在各种数据类型中;唯一需要进一步解释的输出是
k
。值
UINT\u MAX-4
无法放入
int
。这称为超出范围赋值,结果值由实现定义。在您的系统上,它显然会赋值给
int
值,该值s与
无符号int
值的表示形式相同。

j
将在添加之前转换为
无符号int
,这在所有
i+j
中都会发生。一个快速实验

int k=i+j
的情况下,与您和我的实现一样,
i+j
产生:
4294967291
4294967291
大于
std::numeric\u limits::max()
,行为将由实现定义。为什么不尝试将
4294967291
分配给
int

int main() {
    unsigned i = 5;
    int j = -10; 
    double d = i + j;
    long l = i + j;
    int k = i + j;
    std::cout << d << "\n";     //4.29497e+09
    std::cout << l << "\n";     //4294967291
    std::cout << k << "\n";     //-5
    std::cout << i + j << "\n"; //4294967291
}
如所见

#include <iostream>

int main(){
    int k = 4294967291;
    std::cout << k << std::endl;
}
-5