十三誡增修--07:不可以在數值運算、賦值或比較中隨意混用不同型別

作者: wtchen (沒有存在感的人)   2016-05-20 23:14:54
誡7加了abs()可能<0的狀況。
========================================
07. 你不可以在數值運算、賦值或比較中隨意混用不同型別的數值,而不謹慎考
慮數值型別轉換可能帶來的「意外驚喜」(錯愕)。必須隨時注意數值運算
的結果,其範圍是否會超出變數的型別
錯誤例子:
unsigned int sum = 2000000000 + 2000000000; /* 超出 int 存放範圍 */
unsigned int sum = (unsigned int) (2000000000 + 2000000000);
double f = 10 / 3;
正確例子:
/* 全部都用 unsigned int, 注意數字後面的 u, 大寫 U 也成 */
unsigned int sum = 2000000000u + 2000000000u;
/* 或是用顯式的轉型 */
unsigned int sum = (unsigned int) 2000000000 + 2000000000;
double f = 10.0 / 3.0;
作者: EdisonX (卡卡獸)   2016-05-21 09:39:00
表達範圍是complier的事?我以為是補數系統的事…
作者: Caesar08 (Caesar)   2016-05-21 09:59:00
2**16改成2的16次方。C++沒有**
作者: wtchen (沒有存在感的人)   2016-05-21 10:01:00
可是SHRT_MIN 應該是compiler (glibc?)定的吧?2**16晚點改,moptt好難用@@
作者: siriusu (かがみは俺の嫁。)   2016-05-22 10:55:00
竟然有這個case

Links booklink

Contact Us: admin [ a t ] ucptt.com