在C#中是否可以获取变量的内存地址?
我要做的事情非常简单。我想声明Double、Float、Decimal类型的变量,并将值1.1分配给这些变量。然后,我想查看这些值在内存中的表示方式。为了查看它在内存中的存储方式,我需要获取变量的内存地址。一旦我有了内存地址,我计划在代码中设置断点,并使用Visual Studio中的“调试”->“窗口”->“内存”选项来查看数字在内存中的存储方式。
谢谢!
请查看http://en.wikipedia.org/wiki/Double_precision或我的一系列关于浮点数问题的文章:http://blogs.msdn.com/ericlippert/archive/tags/Floating+Point+Arithmetic/default.aspx
float与double相同,只是大小减半:一个符号位,8个指数位,23个尾数位。详见http://en.wikipedia.org/wiki/Single_precision_floating-point_format。
&varname
,它会为您计算出地址。同意tyranid的观点,它们在内部将以位表示,并获取它们的内存地址不会起到任何作用。另一方面,您可以使用ILdasm检查编译器为您在C#代码中指定的值生成的实际类型。考虑以下在C#中的声明:
double d1 = 21.1;
decimal d2 = 22.1M;
float d3 = 21.1F;
如果您通过ILDasm检查IL代码,那么这就是C#编译器为上述声明生成的内容:
//000012: double d1 = 21.1;
IL_0001: ldc.r8 21.100000000000001
..............
//000013: decimal d2 = 22.1M;
IL_000b: ldc.i4 0xdd
...............
//000014: float d3 = 21.1F;
IL_001a: ldc.r4 21.1
在这里,您可以看到十进制被内部表示为十六进制数。