C# 为什么VisualStudio调试器显示int的长十六进制值?

C# 为什么VisualStudio调试器显示int的长十六进制值?,c#,debugging,integer,visual-studio-2013,long-integer,C#,Debugging,Integer,Visual Studio 2013,Long Integer,在调试过程中,我遇到了以下有趣的行为: a的十六进制值字符串是其他字符串的两倍长 您能告诉我为什么会发生这种情况吗?您要求调试器为您计算表达式。它现在就像一个编译器,将您输入的watch表达式转换为代码并运行该代码以显示结果。它认为0xff000000是long类型的文本,这是一个公平的调用,因为int不能存储该值,它大于Int32.MaxValue。因此它使用长参数计算>>运算符,首先将i值转换为long。结果当然也很长 由于您没有像在代码中那样强制转换为较小的类型,因此调试器将结果(切换到

在调试过程中,我遇到了以下有趣的行为:

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


您能告诉我为什么会发生这种情况吗?

您要求调试器为您计算表达式。它现在就像一个编译器,将您输入的watch表达式转换为代码并运行该代码以显示结果。它认为
0xff000000
是long类型的文本,这是一个公平的调用,因为int不能存储该值,它大于Int32.MaxValue。因此它使用长参数计算>>运算符,首先将
i
值转换为long。结果当然也很长

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

其他表达式不是这样的,它们中使用的文本小于Int32.MaxValue,因此使用int参数进行计算,生成一个32位的结果,8个十六进制数字


值得注意的是,调试器的表达式计算器很接近,但与C#编译器的计算器不同。这不是一个问题,但在某些情况下可能很重要。这可能会在Roslyn项目最终发布的某一天发生变化。

谢谢你,像往常一样给出一个详细的答案:这是C#吗?您应该添加一个语言标记。