intは64ビットC#の64ビット整数ですか?
質問
C#のソースコードでは、整数を次のように宣言している可能性があります。
int i = 5;
または
Int32 i = 5;
現在普及している32ビットの世界では、これらは同等です。ただし、64ビットの世界に移行するにあたり、次のことは同じになると言うのは正しいですか?
int i = 5;
Int64 i = 5;
解決
いいえ。 C#仕様では、 int
が正確に32ビットの System.Int32
のエイリアスであると厳密に定義されています。これを変更すると、重大な重大な変更になります。
他のヒント
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