我在c ++上的geeksforgeeks.com上解决了一个问题,该问题由我在操作后确定变量的结果类型。
输入: 1个 1 2 3 5 gfgc
输出: 4 8 4 8 32 1
Example:
Testcase 1:
b/c = 2/3 =>sizeof(2/3)=>float size is 4 bytes
"b/a = 2/1 =>sizeof(2/1)=>double size is 8 bytes"
c/a = 3/1 =>sizeof(3/1)=>integer size is 4 bytes
(c/a)+l =3+5= 8 =>sizeof(8)=>long long size is 8 bytes
sizeof(gfgc) = 32 => It is not 4 because of the reason listed here
sizeof(c) = 1 as it is just a character.
有人可以解释引号行中显示的输出背后的原因吗?
答案 0 :(得分:3)
给出float a
和int b
(反之亦然),并将表达式auto c = a/b
, a
和b
强制转换为{{ 1}}用于划分,而float
是c
。
更一般而言,如果任何一个操作数都是浮点类型,则结果类型将是该列表中在表达式float
,long double
或double
中找到的第一个类型;另一个操作数将转换为该类型。如果两个操作数都是整数,则适用类似的规则。
这些是“常规算术转换”。请参阅[expr.arith.conv]
。