我正在开发一种嵌入式控制器,其中定义了一些不同的非标准类型,例如:

uint8 = unsigned char
sint16 = int


如果需要从uint8转换为sint16,我应该在哪里使用括号?

uint8 u8_My_Var = 255;
sint16 s16_New_Var = 0;

s16_New_Var = ((sint16)u8_My_Var + 1); //or
s16_New_Var = ((sint16)(u8_My_Var) + 1); //or
s16_New_Var = ((sint16)(u8_My_Var + 1)); //or
s16_New_Var = (((sint16)(u8_My_Var)) + 1);


我通常会使用(((sint16)(u8_My_Var)) + 1),但是我开始怀疑类型转换的“范围”。

最佳答案

类型强制转换优先于加法运算,因此除第三行(s16_New_Var = ((sint16)(u8_My_Var + 1));)以外的所有内容都是等效的。但是,如果要在添加后执行转换,这就是您所需要的。

请注意,在所有情况下,最外面的括号都是多余的,因为类型强制转换也优先于赋值。

07-27 17:39