调试时我发现了这个有趣的行为:
a
的十六进制值字符串是其他字符串的两倍。
你能说出为什么会这样吗?
答案 0 :(得分:5)
您要求调试器为您评估表达式。它现在就像编译器一样,将您输入的监视表达式转换为代码并运行该代码以显示结果。它认为0xff000000
是 long 类型的文字,这是一个公平的调用,因为 int 不能存储该值,它大于Int32.MaxValue。所以它评估了>>具有 long 参数的运算符,首先将i
值转换为 long 。结果当然是 long 。
由于您没有像在代码中那样强制转换为较小的类型,因此调试器会将结果(切换为十六进制输出时)显示为64位,16位十六进制数字的长整数。
其他表达式的行为不同,它们中使用的文字小于Int32.MaxValue,因此使用 int 参数进行计算,产生32位结果,8位十六进制数字。
值得注意的可能是调试器的表达式求值程序是接近的,但与C#编译器的求值程序不完全相同。这里不是问题,但在某些情况下它可能很重要。这可能会在罗斯林项目终于出货的某一天发生变化。