簡體   English   中英

為每個變量在 C 中進行類型轉換

[英]Typecasting in C for each of the variables

以下兩者有什么區別?

// uint8_t a; uint8_t b;

uint16_t first = (uint16_t)(a * b);

uint16_t second = (uint16_t)a * (uint16_t)b;

這兩種實現的用例是什么?

a*b的數學乘積在 [0...65,025] 范圍內。

如果unsigned/int是 32 位,則沒有區別。

如果unsigned/int是 16 位,則a * bsigned int溢出和未定義行為(UB) 的風險。 a, b在乘法之前都被轉換為inta*b可能超過INT_MAX (32,767)。

(uint16_t)a * (uint16_t)b; 更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM