Ayb*_*ybe 2 c# debugging integer long-integer visual-studio-2013
调试时我遇到了这个有趣的行为:
十六进制值字符串的a长度是其他值的两倍.

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