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 ;