如何存储整数文字?

问题描述 投票:1回答:2

是否一个小的整数的C#字面(e.g.12)使用4个字节堆栈的像的整数变量?它需要4个字节?

c# integer literals
2个回答
3
投票

难道一个短整型在C#中的文字...

你不能声明文字类型的短,所以问题是前途未卜。在实践中,C#编译器会像对待一个int(或长,如果足够大),很容易将其转换为字节或短期在适当情况下不进行强制转换。和抱怨当这种转换导致溢出。

它最终会像MOV或PUSH,处理器指令得到编码取决于你如何使用文字。一个实际的例子,使用Debug> Windows>系统Disasssembly窗口看看吧:

    static void Main(string[] args) {
        Console.WriteLine(12);
    }

产生:

  005B2DB0 B9 0C 00 00 00       mov         ecx,0Ch  
  005B2DB5 E8 7E 38 BE 72       call        73196638  
  005B2DBA C3                   ret  

注意MOV指令及其产生的指令字节。 B9是“移动32位立即”指令,在接下来的4个字节是在little-endian顺序的值。以其他方式选择,因为所使用的的WriteLine(Int32)已超载C#编译器,它不具有用于字节或短重载。用同样的方法,看看您的特定代码会发生什么。


1
投票

你不能声明short数值文字。你只能申报类型数字文本intfloatfsuffix),doubledsuffix),uintusuffix),longlsuffix),ulongulsuffix)和decimalmsuffix)。

所有的数字文字没有后缀,例如12被推断为所述第一这些类型的,其中它们的值可被表示的组成:intuintlongulong。因此,如果12放入堆栈上,这将需要一个32位的系统上的4个字节。

© www.soinside.com 2019 - 2024. All rights reserved.