sint32 MulDiv(uint32 x_value,sint32 y_value,uint32 z_value){ sint64 v_Result_value; sint64 v_Temp_Val; v_Temp_Val = x_value * y_value; if(0 == z_value){ if(v_Temp_Val> …
随着表达 x_value * y_value ,价值观 x_value 和 y_value 穿过去 通常的算术转换 , 哪一个
x_value * y_value
x_value
y_value
否则,签名是不同的:如果具有无符号类型的操作数的转换等级大于或等于带符号操作数的类型的等级,则带有签名类型的操作数将隐式转换为无符号类型
也就是价值 -12 被“转换”为无符号值,并由于如何 两个补充 (处理计算机上负数的最常用方法)是值 -12 转换为一个非常大的值( 4294967284 更确切地说)。
-12
4294967284
乘法 4294967295 通过 4294967284 导致算术溢出(因为它是32位乘法,32位结果),但它对于无符号整数是很好的定义。但结果将不是您所期望的。
4294967295