2010年7月27日星期二

不等式移项

        unsigned int x=6;

        int y=8;

        printf("(x>y)=%d\n", x>y);

        printf("(x-y>0)=%d\n", x-y>0);

        printf("(y-x<0)=%d\n", y-x<0);

今天实验后才发现,这三个表达式两两不等价,C语言的类型转换真是博大精深啊。
第一个:编译警告,有符号和无符号整数比大小有危险。
第二个:错的一塌糊涂。x-y返回一个无符号整数-2,竟然大于0了。
第三个:对。

比较稳妥的方法是显式类型转换。

没有评论: