关于float 和double的转换
1、C是不是把floating point常量读成double?
2、C把float传给printf是不是将其转换成double?
------解决思路----------------------
用clang编译
1、C是不是把floating point常量读成double? 至少在 flloat f = 9.9 中不是 但 f += 1.0 中是
2、C把float传给printf是不是将其转换成double? 好像真是这样
int main(){
float f = 9.9;
double d = 9.9;
printf("%d %f %lf",sizeof(double),f,d);
}
/*
.section__TEXT,__text,regular,pure_instructions
.section__TEXT,__literal8,8byte_literals
.align3
LCPI0_0:
.quad4621762822593629389 ## double 9.9000000000000003
.section__TEXT,__literal4,4byte_literals
.align2
LCPI0_1:
.long1092511334 ## float 9.89999961
.section__TEXT,__text,regular,pure_instructions
.globl_main
.align4, 0x90
_main: ## @main
.cfi_startproc
## BB#0:
pushq%rbp
Ltmp2:
.cfi_def_cfa_offset 16
Ltmp3:
.cfi_offset %rbp, -16
movq%rsp, %rbp
Ltmp4:
.cfi_def_cfa_register %rbp
subq$32, %rsp
leaqL_.str(%rip), %rdi
movabsq$8, %rsi
movsdLCPI0_0(%rip), %xmm0 sd是和双精度有关的
movssLCPI0_1(%rip), %xmm1 ss是和单精度有关的
movss%xmm1, -4(%rbp)
movsd%xmm0, -16(%rbp)
cvtss2sd-4(%rbp), %xmm0 cvt应该是convert的意思
movsd-16(%rbp), %xmm1
movb$2, %al
callq_printf
movl$0, %ecx
movl%eax, -20(%rbp) ## 4-byte Spill
movl%ecx, %eax
addq$32, %rsp
popq%rbp
retq
.cfi_endproc
.section__TEXT,__cstring,cstring_literals
L_.str: ## @.str
.asciz"%d %f %lf"
.subsections_via_symbols
*/