2014-03-03 121 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));)都等價。但是,如果您想在添加後執行演員表,這是您需要的演員。

請注意,最外面的括號在所有情況下都是多餘的,因爲類型轉換也優先於賦值。