私のC#ソースコードでは、整数を次のように宣言している可能性があります。
int i = 5;
また
Int32 i = 5;
現在普及している32ビットの世界では、それらは同等です。しかし、64ビットの世界に移行するとき、次のことが同じになると言っているのは正しいですか?
int i = 5;
Int64 i = 5;
いいえ。C#仕様では、これが正確に32ビットint
のエイリアスであると厳密に定義されています。System.Int32
これを変更することは、大きな重大な変更になります。
sizeof(testInt)は8になりますか?
いいえ、sizeof(testInt)はエラーです。testIntはローカル変数です。sizeof演算子には、引数として型が必要です。常にエラーになるため、これが8になることはありません。
VS2010は、64ビットマシンでも、ac#マネージ整数を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ビットであると想定している既存のコードの多くを壊してしまうため、Microsoftが将来これを変更する可能性はほとんどありません。
あなたが混乱するかもしれないint
のは、それがエイリアスでInt32
あるため、常に4バイトになることだIntPtr
と思いますが、CPUアーキテクチャのワードサイズと一致すると想定されるため、32ビットシステムでは4バイト、システムでは8バイトになります64 ビット システム。
C# 仕様ECMA-334のセクション「11.1.4 Simple Types」によると、予約語int
は にエイリアスされSystem.Int32
ます。これは仕様にあるため、変更される可能性はほとんどありません。
CLR の 32 ビット バージョンまたは 64 ビット バージョンのどちらを使用しているかに関係なく、C# では常に anint
を意味System.Int32
し、long
常に を意味しSystem.Int64
ます。
はい、ジョンが言ったように、そして「C / C ++の世界」とは異なり、JavaとC#はそれらが実行されているシステムに依存していません。これらは、すべてのシステムで等しい、byte / short / int/longおよびsingle/double精度floatの長さを厳密に定義しています。
接尾辞のない int は、32 ビットまたは 64 ビットのいずれかであり、それが表す値によって異なります。
MSDN で定義されているように:
整数リテラルにサフィックスがない場合、その型は、その値を表すことができるこれらの型 (int、uint、long、ulong) の最初のものになります。
アドレスは次のとおりです: https://msdn.microsoft.com/en-us/library/5kzh1b5w.aspx