“VC是16位基本单元的“, 这是想当然的胡扯。
编译器默认整数为 int 类型, 而不同的编译器对待 int 也不同, vc++ 中的 int 为32bit, Borland C++以及大多数嵌入式编译器 int 为 16bit, 做算术运算, 一定要对数制运算转换有清晰的概念, 要注意正整数的溢出问题, 很多普通 cpu 没有自动防止溢出的功能。
168*196 超过了16 bit 正整数 (32767)的上限而变为负数: -32608, 并没有超过32bit 正整数 (0x7FFFFFFF) 的上限.
要注意编译器在计算=右边的表达式时不会理会 =左边的数据类型, 只有在最后赋值时才会做类型转换.
所以,最好人工指定表达式的类型, 也可使用 L, ul, f 等数据后缀, 清晰而不易出错。 |