十三诫增修--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