[英]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 * b
有signed int
溢出和未定義行為(UB) 的風險。 a, b
在乘法之前都被轉換為int
, a*b
可能超過INT_MAX
(32,767)。
(uint16_t)a * (uint16_t)b;
更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.