分享一个很有意思的小tip
有人在编写代码时运行出了一个让人摸不着头脑的结果:
-20>0U 怎么会是真值呢??
这位朋友还特意检验了一下0U的值,当然是0没错。可是出现这样的结果到底是为什么呢?
这就涉及到c语言中的算术类型转换的问题了:
根据操作数的不同,某些运算符会引起操作数的值从某种类型转换成另一种类型。其效果是将所有操作数转换为同一公共类型,并以此类型为结果。
首先,如果任一操作数为long double类型,则另一操作数将转换为long double类型.
否则,如果任一操作数为double类型,则另一操作数将转换为double类型.
否则,如果任一操作数为float类型,则另一操作数将转换为float类型.
否则,同时对这两个操作数进行整型提升.
如果任一操作数为long int类型,另一操作数为unsigned int类型,此时取决于long int能不能表示完所有unsigned int类型的数。
如果可以则转换为long int; 如果不可以则将两个操作数都转换为unsigned long int类型
否则,如果任一操作数为long int类型,则另一操作数将转换为long int类型.
否则,如果任一操作数为unsigned int类型,则另一操作数将转换为unsigned int类型.(这也是对上面问题的解答)
否则两个操作数都转换为int类型.