当前位置:  开发笔记 > 编程语言 > 正文

int是64位C#中的64位整数吗?

如何解决《int是64位C#中的64位整数吗?》经验,为你挑选了5个好方法。

在我的C#源代码中,我可能已将整数声明为:

int i = 5;

要么

Int32 i = 5;

在目前流行的32位世界中,它们是等价的.但是,当我们进入64位世界时,我是否正确地说以下内容会变得相同?

int i = 5;
Int64 i = 5;

Jon Skeet.. 46

不.C#规范严格定义了这int是一个System.Int32具有正好32位的别名.改变这将是一个重大的突破性变化.



1> Jon Skeet..:

不.C#规范严格定义了这int是一个System.Int32具有正好32位的别名.改变这将是一个重大的突破性变化.


而且,即使在x64中,据我所知,只有指针和大小(size_t)是64位宽,而默认整数仍然是32位宽.
Asaf:在一些依赖于编译器的语言中.例如,在C++中,64位gcc定义长达64位,而Visual C++长达32位.C#不是这样的语言,决定是标准化的,而不是留给编译器供应商.

2> Tomas Petric..:

intC#中的关键字被定义为System.Int32类型的别名,这是(通过名称判断)意味着是32位整数.符合规范:

CLI规范部分8.2.2(内置值和引用类型)有一个包含以下内容的表:

System.Int32 - 有符号的32位整数

C#规范部分8.2.1(预定义类型)有一个类似的表:

int - 32位有符号整数类型

这保证了System.Int32CLR和intC#中的所有内容始终都是32位.


System.Int64很乐意知道这一点.

3> Eric Lippert..:

sizeof(testInt)会是8吗?

不,sizeof(testInt)是一个错误.testInt是一个局部变量.sizeof运算符需要一个类型作为其参数.这永远不会是8因为它总是会出错.

VS2010将ac#托管整数编译为4字节,即使在64位机器上也是如此.

正确.我注意到C#规范的第18.5.8节定义sizeof(int)为编译时常量4.也就是说,当你说 sizeof(int)编译器只是用4替换它时; 就像你在源代码中说"4"一样.

有没有人知道C#中标准的"int"是64/bit的时间是什么时候?

决不.C#规范的4.1.4节规定"int"是"System.Int32"的同义词.

如果你想要的是一个"指针大小的整数",那么使用IntPtr.IntPtr在不同的体系结构上更改其大小.



4> BlueRaja - D..:

intInt32在所有平台上始终是同义词.

微软将来不太可能改变它,因为它会破坏许多假定int为32位的现有代码.


说到那个!MS认为向后兼容性很重要.语言的一致性是我@TomTom:......就是我说的.
@ P.Brian.Mackey我和你在一起.感谢制造商,我们最终拥有一个C语言的语言,该语言足够大,可以实际定义其基本数据类型.

5> Brian Gideon..:

我认为你可能会感到困惑的是它int是一个别名,Int32所以它总是4个字节,但是IntPtr假设它与CPU架构的字大小匹配,所以它在32位系统上是4个字节,在8个字节上是8个字节一个64位系统.

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有