c - 以下代码中发生了多少次类型转换?
问题描述
我正在研究自动类型转换(自动转换)并得出以下代码。
char a = 10, b = 5;
int res;
res = a / b;
我认为自动投射只发生了 2 次(char a
转换为int
,char b
转换为int
)。但据说答案是4次。
有人可以解释为什么自动类型转换发生 4 次吗?
解决方案
请注意,正确的术语是转换。转换可以是隐式的(如果由编译器静默执行),也可以是显式的(通过程序员编写的强制转换运算符)。强制转换始终是显式转换。
这里确实发生了几个隐式转换。请注意,整数常量 like10
被视为int
表达式中的变量。
a = 10
int
通过从to赋值的隐式转换char
。b = 5
int
通过从to赋值的隐式转换char
。a
ina / b
被提升为整数int
,作为通常的算术转换的一部分。b
ina / b
被提升为整数int
,作为通常的算术转换的一部分。
然后的结果a / b
是 type int
,与 = 左操作数的类型相同res
,因此不需要进一步转换。
有关详细信息,请参阅隐式类型提升规则。
推荐阅读
- python - 如何重命名包含括号和引号的列名?
- notepad++ - 如何删除文本后 | 记事本++中的字符
- json - 从 SQL Server NVARCHAR 列中提取 JSON 值
- android - Ionic 3 应用程序 - 如何使字体大小独立于本机设置?
- okhttp - 如何设置 OkHttp 来请求压缩资源而不是解压缩它们
- php - Laravel 不规则复数模型名称
- r - 了解 r 中 durbinWatsonTest() 的输出
- biztalk - 无法将绑定文件导入 Biztalk 管理控制台
- c# - 类型中的成员类型与 EF 中类型中的成员类型不兼容
- javascript - 在javascript中散列一个值 - 可以反转吗?