[C#] int, Int16, Int32 및 Int64의 차이점은 무엇입니까?

사이의 차이 무엇입니까 int, System.Int16, System.Int32그리고 System.Int64그 크기 이외는?



답변

각 정수 유형은 저장 용량의 범위가 다릅니다

   Type      Capacity

   Int16 -- (-32,768 to +32,767)

   Int32 -- (-2,147,483,648 to +2,147,483,647)

   Int64 -- (-9,223,372,036,854,775,808 to +9,223,372,036,854,775,807)

제임스 서덜랜드 (James Sutherland)가 그의 답변 에서 언급 한 바와 같이 :

int그리고 Int32실제로 동의어이다; int좀 더 친숙하게 보일 것 Int32입니다. 코드를 읽는 사람들에게는 32 비트가 더 명확 해집니다. Int32크기가 중요한 (암호화 코드, 구조) ‘integer’가 필요한 곳에 int를 사용하는 경향이 있습니다. 따라서 미래의 관리자는 int적절한 경우 확대하는 것이 안전하다는 것을 알 수
있지만 Int32변수를 동일한 방식으로 변경해야합니다. .

결과 코드는 동일합니다. 차이점은 순전히 가독성 또는 코드 모양 중 하나입니다.


답변

여기서 유일한 차이점은 크기입니다. 여기에있는 모든 int 유형은 다양한 크기의 부호있는 정수 값입니다.

  • Int16: 2 바이트
  • Int32int: 4 바이트
  • Int64 : 8 바이트

Int64나머지와는 약간의 차이가 있습니다. Int64저장 위치에 대한 32 비트 플랫폼 할당 은 원 자성으로 보장되지 않습니다. 다른 모든 유형에 대해 보장됩니다.


답변

int

C #에 정의 된 기본 데이터 유형입니다.

FCL 타입의 Int32에 매핑됩니다.

값 형식이며 System.Int32 구조체를 나타냅니다.

부호가 있으며 32 비트가 필요합니다.

최소 -2147483648과 최대 +2147483647 값을 갖습니다.

Int16

FCL 타입입니다.

C #에서 short 는 Int16에 매핑됩니다.

값 형식이며 System.Int16 구조체를 나타냅니다.

부호가 있으며 16 비트가 필요합니다.

최소 -32768 및 최대 +32767 값을 갖습니다.

Int32

FCL 타입입니다.

C #에서 int 는 Int32에 매핑됩니다.

값 형식이며 System.Int32 구조체를 나타냅니다.

부호가 있으며 32 비트가 필요합니다.

최소 -2147483648과 최대 +2147483647 값을 갖습니다.

Int64

FCL 타입입니다.

C #에서 long 은 Int64에 매핑됩니다.

값 형식이며 System.Int64 구조체를 나타냅니다.

부호가 있으며 64 비트가 필요합니다.

최소 –9,223,372,036,854,775,808 및 최대 9,223,372,036,854,775,807 값을 갖습니다.


답변

Jeffrey Richter (.NET Framework 개발 기여자 중 하나)의 책 ‘CLR via C #’에 따르면 :

int는 C # 컴파일러에서 허용하는 기본 형식 인 반면 Int32는 CLS를 따르는 언어에서 사용할 수있는 프레임 워크 클래스 라이브러리 형식입니다. 실제로 int는 컴파일 중에 Int32로 변환됩니다.

또한,

C #에서는 long이 System.Int64에 매핑되지만 다른 프로그래밍 언어에서는 long이 Int16 또는 Int32에 매핑 될 수 있습니다. 실제로 C ++ / CLI는 Int32만큼 오랫동안 처리합니다.

실제로 대부분의 (.NET) 언어는 키워드로 취급하지 않으며 키워드를 사용하는 코드를 컴파일하지 않습니다.

필자는이 저자와 .NET에 대한 많은 표준 문헌에서 주로 이러한 상호 운용성 문제에 대해 FCL 유형 (예 : Int32)을 언어 별 기본 유형 (예 : int)보다 선호합니다.


답변

아무것도. 유형 간의 유일한 차이 이다 (따라서, 그들은 나타낼 수있는 값의 범위) 크기.


답변

16, 32 및 64 유형에 대한 매우 중요한 참고 사항 :

이 쿼리를 실행하면 … Array.IndexOf (new Int16 [] {1,2,3}, 1)

당신이 묻고 있기 때문에 0 (0)을 얻는다고 가정합니다. .

내가 찾은 것을 확인하십시오. 다음은 모두 -1이 아니라 0을 제공해야합니다 (모든 프레임 워크 버전 2.0, 3.0, 3.5, 4.0에서 이것을 테스트했습니다)

씨#:

Array.IndexOf(new Int16[]{1,2,3}, 1) = -1 (not correct)
Array.IndexOf(new Int32[]{1,2,3}, 1) = 0 (correct)
Array.IndexOf(new Int64[]{1,2,3}, 1) = 0 (correct)

VB.NET :

Array.IndexOf(new Int16(){1,2,3}, 1) = -1 (not correct)
Array.IndexOf(new Int32(){1,2,3}, 1) = 0 (correct)
Array.IndexOf(new Int64(){1,2,3}, 1) = -1 (not correct)

내 요점은 Array.IndexOf 비교의 경우 Int32 만 신뢰한다는 것입니다!


답변

편집 : 이것은 C #,이 질문에 대답했을 때 놓친 태그에 대해서는 사실이 아닙니다. 더 많은 C # 답변이있는 경우 대신 투표하십시오!


그것들은 모두 다양한 크기의 정수를 나타냅니다.

그러나 매우 작은 차이가 있습니다.

int16, int32 및 int64는 모두 고정 크기입니다.

int의 크기는 컴파일하는 아키텍처에 따라 다릅니다 .C 사양은 int를 short로만 정의합니다. 실제로 대상 프로세서의 너비 이지만 32 비트이지만 아마도 알아야합니다. 그렇지 않을 수도 있습니다.