在 Visual Studio C++ 调试器中查看双位模式
Viewing double bit pattern in Visual Studio C++ Debugger
我正在使用 IEEE-754 双打,我想验证位模式在不同平台之间是否匹配。出于这个原因,我想在 Visual Studio C++ 调试器中看到 double 的位模式。
我试过 format specifiers,但他们似乎不允许我将 double 格式化为任何可以让我看到位模式的东西。
我最终找到的一种方法是使用内存视图并在地址字段中输入变量的地址 (&x
)。这允许我设置例如 8 位整数十六进制显示,这给了我我需要的。但是有没有其他更方便的方法在调试器中以这种方式格式化双精度数?
要查看确切的二进制浮点值,您应该使用 %a
/%A
or std::hexfloat
将其打印为十六进制,而不是检查其位模式
printf("Hexadecimal: %a %A\n", 1.5, 1.5);
std::out << std::hexfloat << 1.5 << '\n';
然而,如果你真的需要查看实际的位模式,那么你只需要像 auto bits = reinterpret_cast<uint64_t*>(doubleValue)
一样重新解释底层内存区域的类型。您不需要打开内存视图来实现这一点,一个简单的转换就可以在 Watch window 中工作。因此,要获得 double
和 float
的位模式,请分别使用 *(__int64*)&doubleValue,x
和 *(int*)&floatValue,x
。确实会出现严格的别名,但您实际上不需要在 MSVC 调试器中关心它
请注意,__int64
是 MSVC 的内置类型,因此您可能希望改用 long long
。 Typedef 和 uint64_t
之类的宏在观看
时将不起作用
或者,您可以通过强制转换为 char*
并使用 (char*)&doubleValue, 8
、(char*)&floatValue, 4
或 (char*)&floatingPoint, [sizeof floatingPoint]
打印为数组来单独访问字节。这次不会出现严格的别名,但输出的可读性可能会降低
我正在使用 IEEE-754 双打,我想验证位模式在不同平台之间是否匹配。出于这个原因,我想在 Visual Studio C++ 调试器中看到 double 的位模式。
我试过 format specifiers,但他们似乎不允许我将 double 格式化为任何可以让我看到位模式的东西。
我最终找到的一种方法是使用内存视图并在地址字段中输入变量的地址 (&x
)。这允许我设置例如 8 位整数十六进制显示,这给了我我需要的。但是有没有其他更方便的方法在调试器中以这种方式格式化双精度数?
要查看确切的二进制浮点值,您应该使用 %a
/%A
or std::hexfloat
将其打印为十六进制,而不是检查其位模式
printf("Hexadecimal: %a %A\n", 1.5, 1.5);
std::out << std::hexfloat << 1.5 << '\n';
然而,如果你真的需要查看实际的位模式,那么你只需要像 auto bits = reinterpret_cast<uint64_t*>(doubleValue)
一样重新解释底层内存区域的类型。您不需要打开内存视图来实现这一点,一个简单的转换就可以在 Watch window 中工作。因此,要获得 double
和 float
的位模式,请分别使用 *(__int64*)&doubleValue,x
和 *(int*)&floatValue,x
。确实会出现严格的别名,但您实际上不需要在 MSVC 调试器中关心它
请注意,__int64
是 MSVC 的内置类型,因此您可能希望改用 long long
。 Typedef 和 uint64_t
之类的宏在观看
或者,您可以通过强制转换为 char*
并使用 (char*)&doubleValue, 8
、(char*)&floatValue, 4
或 (char*)&floatingPoint, [sizeof floatingPoint]
打印为数组来单独访问字节。这次不会出现严格的别名,但输出的可读性可能会降低