int 是 64 位 C# 中的 64 位整数吗?
题
在我的 C# 源代码中,我可能将整数声明为:
int i = 5;
或者
Int32 i = 5;
在当前流行的 32 位世界中,它们是等效的。然而,当我们进入 64 位世界时,我所说的以下内容将变得相同,对吗?
int i = 5;
Int64 i = 5;
解决方案
没有。 C#规范严格定义 int
是 System.Int32
的别名,正好是32位。改变这将是主要突破性变化。
其他提示
sizeof(testInt)会不会是8?
不,sizeof(testInt)是一个错误。 testInt是一个局部变量。 sizeof运算符需要一个类型作为其参数。这永远不会是8,因为它总是一个错误。
VS2010将c#托管整数编译为4个字节,即使在64位计算机上也是如此。
正确。我注意到C#规范的第18.5.8节将 sizeof(int)
定义为编译时常量4.也就是说,当你说 sizeof(int)
时编译器简单地将其替换为4;就好像你说“4”一样。在源代码中。
有没有人知道是否/何时会出现标准的“int”时间。在C#中将是64位?
从不。 C#规范的4.1.4节规定了“int”。是“System.Int32”的同义词。
如果你想要的是一个“指针大小的整数”,然后使用IntPtr。 IntPtr在不同的体系结构上更改其大小。
int
始终与所有平台上的 Int32
同义。
微软将来不太可能改变这种情况,因为它会破坏许多假设 int
为32位的现有代码。
我认为你可能会感到困惑的是 int
是 Int32
的别名所以它总是4个字节,但是 IntPtr
假设匹配CPU架构的字大小,因此它在32位系统上是4个字节,在64位系统上是8个字节。
根据C#规范 ECMA-334 ,section“11.1.4 Simple Types”,保留字 int
将别名为 System.Int32
。由于这是在规范中,因此不太可能改变。
无论您使用的是32位版本还是64位版本的CLR,在C#中 int
始终意味着 System.Int32
和< code> long 总是指 System.Int64
。
以下将在C#中永远是真实的:
sbyte 签名8位,1个字节
字节无符号8位,1字节
短签名16位,2个字节
ushort 无符号16位,2个字节
int 签名32位,4个字节
uint 无符号32位,4字节
长签名64位,8个字节
ulong 无符号64位,8字节
整数 literal 只是一个数字序列(例如 314159
),没有任何这些显式类型。 C#为它指定序列中的第一个类型( int , uint , long , ulong ) 。在上述至少一个答案中,这似乎有点混乱。
以某种方式预测C#(和朋友)永远不会打扰“软弱的名字”似乎是安全的。 &gt; = 128位整数的类型。只要处理器支持广泛的数学运算,并且几乎不使用任何数据,我们将很好地支持任意大整数和对UInt128,UInt256等的超精确支持。 64位地址空间真的大。如果它们太小,那么就会出现像ASLR或更高效的MapReduce等一些神秘的原因。
是的,正如Jon所说,与'C / C ++世界'不同,Java和C#并不依赖于他们正在运行的系统。它们严格定义了byte / short / int / long和单/双精度浮点数的长度,在每个系统上都相等。
int without suffix可以是32位或64位,它取决于它所代表的值。
在MSDN中定义:
当整数文字没有后缀时,它的类型是这些类型中的第一个,其值可以表示为:int,uint,long,ulong。
这是地址: https://msdn.microsoft.com/en-us/library/5kzh1b5w.aspx