java中char类型和int类型相加结果是char类型还是int类型

2024-11-22 21:46:14
推荐回答(3个)
回答(1):

假设程序语言是C/C++。
一般而言结果是int类型。如果在某个编译器上char被实现为unsigned char且长度与int相同,则结果会是unsigned int类型。

执行算术运算,首先对运算对象进行整型提升。所谓整型提升,即按如下规则类型转换:
对于bool、(signed/unsigned) char、(unsigned) short等类型来说,只要它们所有可能的值都能存在int里,它们就会提升成int类型;否则,提升成unsigned int类型。例如,两个signed char相加,两个signed char都会提升成int。
较大的char类型(wchar_t、char16_t、char32_t)提升成int、unsigned int、long、unsigned long、long long和unsigned long long中最小的能容纳原类型所有可能的值的类型。

整型提升后,如果结果类型匹配,无需进一步的转换。如果两个(提升后的)运算对象都是带符号的,或者都是无符号的,则小类型转换成大类型。例如,int与long相加,结果是long。

如果一个运算对象是无符号类型,另一个运算对象是带符号类型,又分两种情况:

无符号的类型不小于带符号的类型(比如unsigned long与int),此时带符号的转换成无符号的。例如原题中若char被实现为unsigned char且长度与int相同,则首先执行整型提升char被转换为unsigned int(int不能容纳char的所有可能值),然后int与unsigned int相加,int被转换为unsigned int,最终结果为unsigned int。
无符号的类型小于带符号的类型,此时结果依赖于机器。如果无符号类型的所有值都能存在该带符号类型中,则无符号的转换成带符号的,否则带符号的转换成无符号的。

回答(2):

char类型是16位的,底层采用unicode编码保存.
char类型是可以直接赋值给int类型的,因为是16位到32位低到高.
举个例子比如int i='1';打印i的值是49.
char类型跟int类型进行计算的时候会自动转换为int类型
比如System.out.println('1'+1);输出结果是50.
char类型的'='换成int是61

回答(3):

刚好今天在复习,过几天就面试去的.当然我说的是JAVA的.我给你几个例子就知道了.
System.out.println('0'+'A');// 48+65 = 113 未指定类型--输出int

System.out.println((char)('0'+'A'));// q 强转char --输出char

System.out.println(10+'A'); //75 未指定类型--输出int

System.out.println((char)10+'A'); //75 未指定类型--输出int

System.out.println((char)(10+'A')); //K 强转char --输出char
System.out.println((char)((char)10+'A')); //K 强转char --输出char
也就是说,结果未指定类型的情况,默认输出的是码值(ASCII码表对应的值),即int类型.
如果指定了类型,输出的就是那个类型.比如char.
我的总结:
字符参与运算,其实是拿字符对应的码表中的数字进行运算的,
如果本身不是字符,而是int类型或char类型的数字(默认为码值,比如 char a = 10, int a = 10;这里的10都会默认为码值10),则就先转换其他字符对应的码值再计算结果,找到结果对应的字符.如果类型为char型,则输出字符,如果不是,则输出结果码值.