質問

C#のソースコードでは、整数を次のように宣言している可能性があります。

int i = 5;

または

Int32 i = 5;

現在普及している32ビットの世界では、これらは同等です。ただし、64ビットの世界に移行するにあたり、次のことは同じになると言うのは正しいですか?

int i = 5;
Int64 i = 5;
役に立ちましたか?

解決

いいえ。 C#仕様では、 int が正確に32ビットの System.Int32 のエイリアスであると厳密に定義されています。これを変更すると、重大な重大な変更になります。

他のヒント

C#の int キーワードは、 System.Int32 型のエイリアスとして定義されており、これは(名前で判断すると)32ビット整数を意味します。 。仕様に合わせて:

  

CLI仕様セクション8.2.2 (組み込み値と参照タイプ)には、次のテーブルがあります。

     
      
  • System.Int32 -符号付き32ビット整数
  •   
     

C#仕様セクション8.2.1 (事前定義型)には同様の表があります:

     
      
  • int -32ビットの符号付き整数型
  •   

これにより、CLRの System.Int32 とC#の int の両方が常に32ビットになることが保証されます。

  

sizeof(testInt)は8になりますか?

いいえ、sizeof(testInt)はエラーです。 testIntはローカル変数です。 sizeof演算子には、引数として型が必要です。常にエラーになるため、これは8にはなりません。

  

VS2010は、64ビットマシン上でさえ、c#管理整数を4バイトとしてコンパイルします。

正しい。 C#仕様のセクション18.5.8では、 sizeof(int)をコンパイル時定数4として定義しています。つまり、 sizeof(int)と言うと、コンパイラは単にそれを4に置き換えます。 「4」と言ったようです。ソースコードで。

  

標準の" int&quot ;; C#では64ビットになりますか?

決して。 C#仕様のセクション4.1.4では、「int」がは「System.Int32」の同義語です。

「ポインタサイズの整数」が必要な場合次に、IntPtrを使用します。 IntPtrは、さまざまなアーキテクチャでサイズを変更します。

int は、すべてのプラットフォームで常に Int32 と同義です。

int が32ビットであると想定している多くの既存のコードが壊れる可能性があるため、Microsoftが将来これを変更することはほとんどありません。

混乱するのは、 int Int32 のエイリアスであるため、常に4バイトですが、 IntPtr CPUアーキテクチャのワードサイズと一致すると想定されているため、32ビットシステムでは4バイト、64ビットシステムでは8バイトになります。

C#仕様 ECMA-334 、セクション" 11.1.4 Simple Types&quot ;、予約語 int System.Int32 にエイリアスされます。これは仕様にあるため、変更されることはほとんどありません。

CLRの32ビットバージョンと64ビットバージョンのどちらを使用している場合でも、C#では int は常に System.Int32 および< code> long は常に System.Int64 を意味します。

以下は、C#で常にtrue になります。

>

sbyte 符号付き8ビット、1バイト

byte 符号なし8ビット、1バイト

short 署名付き16ビット、2バイト

ushort 符号なし16ビット、2バイト

int 署名された32ビット、4バイト

uint 符号なし32ビット、4バイト

long 署名された64ビット、8バイト

ulong 符号なし64ビット、8バイト

整数 literal は、これらの明示的な型のいずれも含まない単なる数字列(例: 314159 )です。 C#は、それが適合するシーケンスの最初のタイプ( int uint long ulong )を割り当てます。これは、上記の応答の少なくとも1つで少し混乱しているようです。

奇妙な 単項マイナス演算子(マイナス記号)が数字列の前に現れると、選択が( int long )に減少しません 。リテラルは常に正です。マイナス記号は実際には演算子です。したがって、おそらく -314159 exactly -((int)314159)と同じものです。明らかに、 -2147483648 int に直接変換する特別なケースがあります。それ以外の場合は、-((uint)2147483648)になります。私は何か不愉快なことをすると思います。

どういうわけか、C#(および友人)が「スクイーズな名前」に煩わされることはないと安全に思われます。 &gt; = 128ビット整数の型。プロセッサが幅広い計算をサポートし、ほとんど使用しないとすぐに、任意の大きな整数とUInt128、UInt256などの非常に正確なサポートをサポートします。 64ビットのアドレス空間は本当に大きいです。小さすぎる場合は、ASLRやより効率的なMapReduceなどの難解な理由のためです。

はい、ジョンが言ったように、「C / C ++の世界」とは異なり、JavaとC#は実行しているシステムに依存しません。それらは、すべてのシステムで等しいbyte / short / int / longおよびsingle / double precisionのfloatの長さを厳密に定義しています。

接尾辞のないintは、32ビットまたは64ビットのいずれかであり、それが表す値に依存します。

MSDNで定義されているとおり:

  

整数リテラルに接尾辞がない場合、その型は、値を表すことができるこれらの型の最初のものです:int、uint、long、ulong。

住所は次のとおりです。 https://msdn.microsoft.com/en-us/library/5kzh1b5w.aspx

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top