在我的 C# 源代码中,我可能已将整数声明为:
int i = 5;
或者Int32 i = 5;
在当前普及的32位世界中,它们是等效的。然而,随着我们迈向64位世界,我说以下内容将变得相同,这种说法是否正确?
在当前普及的32位世界中,它们是等效的。但是,随着我们进入64位世界,我所说的将变得相同,这种说法是否正确?
int i = 5;
Int64 i = 5;
不行。C#规范严格定义int
为一个32位的别名,即System.Int32
。更改这一点将是一个重大的破坏性变化。
testInt的sizeof(testInt)会是8吗?
不会,sizeof运算符需要一个类型作为参数,而testInt是一个局部变量。这将永远不会是8,因为它总是会出错。
即使在64位机器上,VS2010编译C#托管整数也只有4个字节。
正确。我注意到C#规范的18.5.8节将sizeof(int)
定义为编译时常量4。也就是说,当你使用sizeof(int)
时,编译器只是用4替换了它,就好像你在源代码中写的是“4”一样。
有人知道C#中的标准"int"何时会变成64位吗?
从未。C#规范的4.1.4节指出,“int”是“System.Int32”的同义词。
如果您想要一个“指针大小的整数”,那么请使用IntPtr。IntPtr在不同的体系结构上改变其大小。
int
在所有平台上都与 Int32
同义。
微软很可能不会在未来更改它,因为这将破坏大量现有的代码,这些代码假定 int
是 32 位。
int
应该有多宽。你还必须指定如何编译代码,这可能意味着(2)你的源代码变得依赖于特定的编译器。(请记住,虽然C#语言是标准化的,但编译器开关和选项通常不是。) - stakx - no longer contributing我认为你可能会困惑的是 int
是 Int32
的别名,因此它始终为4个字节,但是 IntPtr
应该匹配CPU架构的字长,所以在32位系统上它将为4个字节,在64位系统上它将为8个字节。
-314159
大概就是 完全相同 于 -((int)314159)
。除了显然有一个特殊情况可以使 -2147483648
直接成为 int;否则它将会成为 -((uint)2147483648)
。我想这样做可能会产生一些不愉快的结果。int
始终表示System.Int32
,而long
始终表示System.Int64
。是的,正如Jon所说,与'C/C++世界'不同,Java和C#并不依赖于它们运行的系统。它们对于byte/short/int/long和single/double精度浮点数都有严格定义的长度,在每个系统上都是相等的。
没有后缀的int可以是32位或64位,这取决于它所代表的值。
如MSDN所定义:
当整数字面量没有后缀时,其类型是以下类型中可以表示其值的第一个类型:int、uint、long、ulong。
这里是地址: https://msdn.microsoft.com/zh-cn/library/5kzh1b5w.aspx
int
始终为32位长。 - Raimund Krämer
IntPtr
是那种结构。 请参阅Size
属性的文档,这将为此提供一些解释。 - MasterMastic