为什么"double"表示为整数?

One*_*ero 0 c double gcc gdb binary-data

void foo(double a) {  
  ...
}
Run Code Online (Sandbox Code Playgroud)

main()我传递107.0foo它作为参数.然后我使用gdb来检查aby 的二进制表示p /t a,这就是我得到的:

$1 = 1101011
Run Code Online (Sandbox Code Playgroud)

这个结果对我来说似乎很奇怪.这是INTEGER 107的二进制表示.但是这里的类型a被定义为double并且我们传递了一个参数107.0.我们知道双精度具有不同的二进制表示形式作为整数.

谁能解释为什么a有一个整数二进制代表而不是双倍?编译器做了什么搞笑的事情?

sab*_*lel 5

你告诉gdb把它打印成二进制整数.

 p /t a
Run Code Online (Sandbox Code Playgroud)

如果要查看浮点版本的使用

 p /f a
Run Code Online (Sandbox Code Playgroud)

输出格式

x将值的位作为整数,并以十六进制打印整数.

d以带符号的十进制打印为整数.

u以无符号十进制形式打印为整数.

o以八进制打印为整数.

t以二进制形式打印为整数.字母"t"代表"两个".(2)

a打印为地址,绝对值为十六进制,偏离最近的前一个符号.您可以使用此格式来发现未知地址所在的位置(在哪个函数中):

c作为整数并将其打印为字符常量.

f将值的位称为浮点数,并使用典型的浮点语法进行打印.

例如,要以十六进制打印程序计数器(请参见"寄存器"一节),请键入 p/x $pc