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