C++ 在算术表达式C+中键入强制转换+; inta=5,b=2; 双ans1=a/b;//ans1=2 cout

C++ 在算术表达式C+中键入强制转换+; inta=5,b=2; 双ans1=a/b;//ans1=2 cout,c++,C++,在第一个示例中,首先使用截断整数除法对两个ints进行除法,然后将结果(2)分配给ans1 第二种情况有一个微妙的不同:您选择的整数类型小于int。因此,在任何算术运算符作用于它们之前,它们都会转换为int(如果适合,就像这里一样,转换为无符号int),同时保留它们的值,并且在int上,您显示的操作不会溢出。然后将结果(其类型为int)分配给无符号int,因为它是非负的,所以不会发生任何奇怪的情况 如果使用无符号int而不是无符号short尝试第二个示例,则可以观察到“整数溢出”(由于无符号算术

在第一个示例中,首先使用截断整数除法对两个
int
s进行除法,然后将结果(2)分配给
ans1

第二种情况有一个微妙的不同:您选择的整数类型小于
int
。因此,在任何算术运算符作用于它们之前,它们都会转换为
int
(如果适合,就像这里一样,转换为
无符号int
),同时保留它们的值,并且在
int
上,您显示的操作不会溢出。然后将结果(其类型为
int
)分配给
无符号int
,因为它是非负的,所以不会发生任何奇怪的情况


如果使用
无符号int
而不是
无符号short
尝试第二个示例,则可以观察到“整数溢出”(由于无符号算术换行,因此不是真正的溢出)。

在第一个示例中,您首先使用截断整数除法对两个
int
进行除法,然后分配结果(2) 至
ans1

第二种情况在一种微妙的方式上有所不同:您选择了小于
int
的整数类型。因此,在任何算术运算符对它们进行操作之前,它们都会转换为
int
(如果适合,就像这里一样,转换为
无符号int
)在保留其值的同时,在
int
上,显示的操作不会溢出。然后将结果(类型为
int
)分配给
无符号int
,因为它是非负的,所以不会发生任何奇怪的情况


如果使用
unsigned int
而不是
unsigned short
尝试第二个示例,则可以观察到“整数溢出”(由于无符号算术换行,因此它不是实溢出).

第二种情况下,无符号短int小于int,因此它们都转换为int,那么在第一种情况下,int也小于double,那么为什么不使用相同的强制转换规则呢?或者它只是针对(/)运算符(特殊情况)?#包括使用命名空间std;int main(){inta=1000000,b=1000000;long-long-intans=a*b;cout@knock_out这是由一组复杂的规则控制的,即所谓的“常用算术转换”例如,如果你不关心演讲的其余部分,或者如果你只需要措辞而不需要解释,就从19:20开始解释。在第二种情况下,无符号短int小于int,因此它们都转换为int,那么在第一种情况下,int也小于double,那么为什么不使用相同的强制转换规则呢?或者仅针对(/)运算符(特殊情况)?包括使用命名空间std;int main(){int a=1000000,b=1000000;long-long int ans=a*b;cout@knock_out这是由一组复杂的规则控制的,即所谓的“常用算术转换”例如,如果你不关心演讲的其余部分,或者如果你只需要措辞而不需要解释,则从19:20左右开始解释。
    int a = 5 , b = 2 ;
    double ans1 = a / b ; // ans1 = 2
    cout << setprecision ( 4 ) << fixed << ans1 << endl ;

    unsigned short int c = USHRT_MAX , d = USHRT_MAX ;
    unsigned int ans2 = c + d ; // ans2 = 131070 
    cout << ans2 ;