在我的C#源代码中,我可能已将整数声明为:
int i = 5;
或
Int32 i = 5;
在目前流行的32位世界中,它们是等价的。但是,当我们进入64位世界时,我是否正确地说以下内容会变得相同?
int i = 5;
Int64 i = 5;
答案 0 :(得分:46)
没有。 C#规范严格定义int
是System.Int32
的别名,正好是32位。改变这将是主要突破性变化。
答案 1 :(得分:43)
C#中的int
关键字被定义为System.Int32
类型的别名,这是(通过名称判断)意味着是32位整数。根据规范:
CLI specification第8.2.2节(内置值和引用类型)有一个包含以下内容的表:
System.Int32
- 有符号32位整数C# specification第8.2.1节(预定义类型)有一个类似的表:
int
- 32位有符号整数类型
这可以保证CLR中的System.Int32
和C#中的int
始终都是32位。
答案 2 :(得分:17)
sizeof(testInt)会不会是8?
不,sizeof(testInt)是一个错误。 testInt是一个局部变量。 sizeof运算符需要一个类型作为其参数。这永远不会是8,因为它总是一个错误。
VS2010将c#托管整数编译为4个字节,即使在64位计算机上也是如此。
正确。我注意到C#规范的第18.5.8节将sizeof(int)
定义为编译时常量4.也就是说,当你说sizeof(int)
时,编译器只是将其替换为4;就像你在源代码中说“4”一样。
是否有人知道C#中标准“int”的时间是否为64位?
从不。 C#规范的4.1.4节规定“int”是“System.Int32”的同义词。
如果你想要的是“指针大小的整数”,那么使用IntPtr。 IntPtr在不同的体系结构上更改其大小。
答案 3 :(得分:11)
int
始终是所有平台上Int32
的同义词。
微软将来不太可能改变这种情况,因为它会破坏许多假设int
为32位的现有代码。
答案 4 :(得分:5)
我认为你可能会感到困惑的是int
是Int32
的别名所以它总是4个字节,但IntPtr
假设匹配字的大小CPU架构因此在32位系统上为4个字节,在64位系统上为8个字节。
答案 5 :(得分:4)
根据C#规范ECMA-334,“11.1.4简单类型”部分,保留字int
将别名为System.Int32
。由于这是在规范中,因此不太可能改变。
答案 6 :(得分:3)
无论您使用的是32位版本还是64位版本的CLR,在C#中int
始终意味着System.Int32
而long
始终意味着{ {1}}。
答案 7 :(得分:3)
以下将在C#中使用always be true:
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 ) 。在上述至少一个答案中,这似乎有点混乱。
Weirdly 一元减号运算符(减号)出现在一串数字之前不将选项减少为( int ,长)。文字总是积极的;减号确实是一个运营商。因此,大概-314159
与<{1}}完全相同。除了显然有一个特殊情况,让-((int)314159)
直接进入 int ;否则它是-2147483648
。我认为这会让事情变得不愉快。
不知何故,似乎可以安全地预测C#(和朋友)永远不会打扰&#34;软弱的名字&#34; &gt; = 128位整数的类型。只要处理器支持广泛的数学运算,并且几乎不使用任何数据,我们就可以很好地支持任意大整数和对UInt128,UInt256等的超精确支持。 64位地址空间真的大。如果它们太小,它会出于某种深奥的原因,如ASLR或更高效的MapReduce等。
答案 8 :(得分:0)
是的,正如Jon所说,与'C / C ++世界'不同,Java和C#并不依赖于他们正在运行的系统。它们严格定义了byte / short / int / long和单/双精度浮点数的长度,在每个系统上都相等。
答案 9 :(得分:-1)
int without suffix可以是32位或64位,它取决于它所代表的值。
在MSDN中定义:
当整数文字没有后缀时,它的类型是这些类型中的第一个,其值可以表示为:int,uint,long,ulong。
这是地址: https://msdn.microsoft.com/en-us/library/5kzh1b5w.aspx