One*_*ero 0 c double gcc gdb binary-data
void foo(double a) {
...
}
Run Code Online (Sandbox Code Playgroud)
在main()我传递107.0给foo它作为参数.然后我使用gdb来检查aby 的二进制表示p /t a,这就是我得到的:
$1 = 1101011
Run Code Online (Sandbox Code Playgroud)
这个结果对我来说似乎很奇怪.这是INTEGER 107的二进制表示.但是这里的类型a被定义为double并且我们传递了一个参数107.0.我们知道双精度具有不同的二进制表示形式作为整数.
谁能解释为什么a有一个整数二进制代表而不是双倍?编译器做了什么搞笑的事情?
你告诉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
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |