int16, int32, int64로 변환 - 어떤 것을 선택 해야하는지 어떻게 알 수 있습니까?

StackOverflow https://stackoverflow.com/questions/270263

  •  06-07-2019
  •  | 
  •  

문제

나는 종종 재고가있는 값 (보통 문자열로)을 변환 한 다음 int로 변환해야합니다. 그러나 C# (.NET)에서는 int16, int32 또는 int64를 선택해야합니다. 검색 된 숫자가 얼마나 큰지 모르면 어떤 것을 선택할 것인지 어떻게 알 수 있습니까?

도움이 되었습니까?

해결책

int16을 저장하는 RAM을 선언한다고 언급 한 모든 사람들은 다운 보트를 가져야합니다.

질문에 대한 답은 키워드 "int"를 사용하는 것입니다 (또는 기분이 좋으면 "int32"를 사용하십시오).

그것은 당신에게 최대 24 억 개의 숫자를 제공합니다 ... 또한, 32 비트 프로세서는 그 int를 더 잘 처리 할 것입니다 ... 또한 (또한 가장 중요한 이유)는 거의 모든 이유로 그 int를 사용할 계획이라면 ... "int"(int32) 여야 할 것입니다.

.NET 프레임 워크에서 숫자 필드의 99.999% (정수)는 "ints"(int32)입니다.

예 : Array.length, process.id, wind

편집 : 나는 내 심술쟁이가 나를 투명하게 만들게 될 것이라는 것을 알고 있습니다. 그러나 이것이 올바른 대답입니다.

다른 팁

그냥 추가하고 싶었습니다 ... .NET 1.1 시절에 컴파일러가 최적화되어 'int'작업은 실제로 바이트 또는 짧은 작업보다 빠릅니다.

나는 그것이 오늘날에도 여전히 유지되고 있다고 생각하지만 지금은 몇 가지 테스트를 실행하고 있습니다.


편집 : 나는 놀라운 발견을 받았습니다 : 짧은 (들)에 대한 추가 작업을 추가, 빼기 및 곱하는 것은 실제로 int를 반환합니다!

반복적으로 TryParse ()를 시도하는 것은 말이되지 않으며 이미 선언 된 필드가 있습니다. 유형 객체 필드를 만들지 않으면 마음을 바꿀 수 없습니다. 좋은 생각이 아닙니다.

필드가 나타내는 데이터는 물리적 의미를 갖습니다. 그것은 나이, 크기, 카운트 등입니다. 물리적 수량은 범위에 현실적인 제한을 가지고 있습니다. 해당 범위를 저장할 수있는 int 유형을 선택하십시오. 오버플로를 고치려고하지 마십시오. 버그가 될 것입니다.

현재 가장 인기있는 답변과는 달리 짧은 정수 (INT16 및 SBYTE와 같은)는 종종 더 큰 정수 (INT32 및 int64와 같은)보다 메모리에서 공간을 덜 차지합니다. Sbyte/Short/Int/Long의 큰 배열을 인스턴스화하고 Perfmon을 사용하여 관리 된 힙 크기를 측정하여 쉽게 확인할 수 있습니다. 많은 CLR 풍미가 산술을 수행 할 때 CPU- 특이 적 최적화를 위해 이러한 정수를 넓히는 것이 사실이지만, 물체의 일부로 저장되면 필요한만큼의 메모리 만 차지합니다.

따라서 큰 정수 목록 (또는 정수 필드가 포함 된 큰 개체 목록)으로 작업 할 경우 특히 크기를 고려해야합니다. 또한 CLS 준수와 같은 것을 고려해야합니다 (공개 회원의 서명되지 않은 정수를 분해 함).

문자열을 정수로 변환하는 것과 같은 간단한 경우의 경우, INT32 (C# int)가 일반적으로 가장 의미가 있으며 다른 프로그래머가 기대할 수있는 것일 가능성이 높습니다.

우리가 단지 몇 숫자에 대해 이야기하고 있다면, 가장 큰 것을 선택하면 전체 RAM 사용에 눈에 띄는 차이가 없으며 작동합니다. 많은 숫자에 대해 이야기하고 있다면 ram을 절약하기 위해 tryparse ()를 사용하고 가장 작은 int 유형을 알아 내야합니다.

모든 컴퓨터는 유한합니다. 사용자 요구 사항에 따라 상한을 정의해야합니다.

상한이 실제로없고 '무제한'값을 허용하려면 .NET Java 런타임 라이브러리를 프로젝트에 추가하여 Java.math.biginteger 클래스를 사용할 수 있습니다. 정수.

참고 : .NET Java 라이브러리에는 전체 Devstudio가 제공되지만 Express와 함께 제공되지는 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top