本帖最后由 刘前辈 于 2011-1-18 14:47 编辑
哎呀,别打我,我躲。不是我胡扯,是书上在胡扯。
我这本书是89年以前出版的标准,当然管不着 C89 还是C99 。——别拿改进以后的标准说事!将来还会有C2019,我那时能说C99都是完全胡扯?
抄一段前言:
本书收集了覆盖K&R ·C,ANSI C标准以及有关各种版本诸如 Microsoft C, Quick C, Turbo C, Borland C++等的全部命令、功能、编程和应用,以及他们之间的比较等全部内容。
……
本书很适用于所有C使用者。
不仅这一本,还看过一本,最后一句说的是“……long 类型依此类推……”
现在的改进把这一段放到“算数转换”里去了。
先承认个错误,40楼是对的。书上说了:
“首先,……其次,……,再次,……再再次,……如果上述几种情况都不符合,那么两个操作数的类型都作为 int ,计算结果的类型也是 int 。”
168*196就是这种情况。还有0x7FFF *0x7FF =1;(胡扯了)也是这种情况。
long*long =int 也是这种情况?越乘越小了,无法处理,最后只好 转换为 int *int ——合理地胡来了。
最基本的原理,2个操作数,运算前,较小的那个,其类型按照较大那个操作数类型自动转换,……运算结果类型也和最大那个操作数类型一致。
又要有人说胡扯了。建议:胡扯之前拿出证据,Original Type 都包含什么类型讲清楚。
|