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

时间:2014-03-31 16:39:25

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

调试时我发现了这个有趣的行为:

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

enter image description here

你能说出为什么会这样吗?

1 个答案:

答案 0 :(得分:5)

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

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

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

值得注意的可能是调试器的表达式求值程序是接近的,但与C#编译器的求值程序不完全相同。这里不是问题,但在某些情况下它可能很重要。这可能会在罗斯林项目终于出货的某一天发生变化。