c# - 为什么 Visual Studio 调试器显示 int 的长十六进制值?

标签 c# debugging integer visual-studio-2013 long-integer

在调试时我遇到了这个有趣的行为:

a 的十六进制值字符串是其他字符串的两倍长。

enter image description here

你能说出为什么会发生这种情况吗?

最佳答案

您要求调试器为您计算表达式。它现在就像一个编译器,将您输入的监视表达式转换为代码并运行该代码以显示结果。它认为0xff000000long类型的文字,这是一个公平的调用,因为int无法存储该值,它比Int32大。最大值。因此,它使用 long 参数计算 >> 运算符,首先将 i 值转换为 long。结果当然也是

由于您没有像在代码中那样转换为较小的类型,因此调试器将结果(切换到十六进制输出时)显示为 64 位、16 个十六进制数字的 long。

其他表达式的行为并非如此,它们中使用的文字小于 Int32.MaxValue,因此使用 int 参数进行计算,生成 32 位结果,8 个十六进制数字。

值得注意的是,调试器的表达式求值器与 C# 编译器的求值器很接近,但并不完全相同。这里不是问题,但在某些情况下可能很重要。当 Roslyn 项目最终发布时,这种情况可能会在某一天发生改变。

关于c# - 为什么 Visual Studio 调试器显示 int 的长十六进制值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22767288/

相关文章:

c# - 当我使用 Response.Redirect() 或 Server.Transfer() 我的用户被注销

java - 如何在eclipse的 Debug模式下更改二维数组的表示?

c# - 为什么 0 不能拆箱为整数?

c# - .NET 代码是否随着 CLR 调试器附加到进程而运行得更慢?

java - 如何从文件中读取 'integer'类型的数据?

c - 旋转 C 中任何整数的位

c# - 将 PHP 函数转换为 C#

c# - 如何将客户的 IP 地址转发到 Google Places Autocomplete API

c# - 按照惯例使用 AutoMapper 将 Wrapper<T> 映射到 T'

java - 跟踪在远程 *nix 机器上运行的 java 程序的执行