2014-03-03 70 views
0

我工作的嵌入式控制器,具有确定了几个不同的非标准的类型,例如:圆括号和铸字

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),但是我开始琢磨一下类型转换的“范围”。

+0

第一,第二和第四是相同的;第三是危险的dirfferent,它执行无符号8位计算(包装在256),然后施放。 – vonbrand

回答

1

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

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