括号和类型转换

时间:2014-03-03 16:07:56

标签: c gcc casting parentheses

我正在研究嵌入式控制器,定义了几种不同的非标准类型,EG:

uint8 = unsigned char
sint16 = int

如果我需要从uint8sint16进行类型转换,我应该在哪里使用括号?

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),但是我开始想知道类型转换的“范围”。

1 个答案:

答案 0 :(得分:1)

类型转换优先于添加,因此除第三行(s16_New_Var = ((sint16)(u8_My_Var + 1));)之外的所有内容都是等效的。但是,如果您想在添加后执行演员表,那么这就是您需要的演员。

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