int i = -20; unsigned j = 10; i+j 的值为多少?为什么?
2个回答
展开全部
-10,在运算时会隐含的进行类型转化,低类型向高类型转换,比如,float和double型的浮点数数进行运算,会自动将float型转换成double型,再进行运算。结果也是高类型的。
类型高低其实就是值域的覆盖范围,与CPU的字长和编译器都有关系。在Linux_32位系统中unsigned比int要低。但是切记这不是一定的,说不定winTC里就不是这样的定义了(我没试过)。
隐式转换规则如下:
1. 程式在执行算术运算时,低类型能够转换为高类型。
2. 在赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。
3. 当在函数调用时,将实参值赋给形参,系统隐式地将实参转换为形参的类型后,赋给形参。
4. 函数有返回值时,系统将自动地将返回表达式类型转换为函数类型后,赋值给调用函数。
PS:隐含类型转换是很容易让人迷惑的,同样的代码,在不同的环境中结果可能不同,而且如果因为这个问题导致程序运行出了错误,是极难发现的。所以最靠谱的方法就是在程序中永远显式的做类型转换。
类型高低其实就是值域的覆盖范围,与CPU的字长和编译器都有关系。在Linux_32位系统中unsigned比int要低。但是切记这不是一定的,说不定winTC里就不是这样的定义了(我没试过)。
隐式转换规则如下:
1. 程式在执行算术运算时,低类型能够转换为高类型。
2. 在赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。
3. 当在函数调用时,将实参值赋给形参,系统隐式地将实参转换为形参的类型后,赋给形参。
4. 函数有返回值时,系统将自动地将返回表达式类型转换为函数类型后,赋值给调用函数。
PS:隐含类型转换是很容易让人迷惑的,同样的代码,在不同的环境中结果可能不同,而且如果因为这个问题导致程序运行出了错误,是极难发现的。所以最靠谱的方法就是在程序中永远显式的做类型转换。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询