문제

내 C# 소스 코드에서 정수를 다음과 같이 선언했을 수 있습니다.

int i = 5;

또는

Int32 i = 5;

현재 널리 퍼진 32 비트 세계에서 그들은 동등합니다. 그러나 우리가 64 비트 세계로 이동함에 따라 다음이 동일하게 될 것이라고 말하는 것이 맞습니까?

int i = 5;
Int64 i = 5;
도움이 되었습니까?

해결책

아니요. C# 사양은이를 엄격하게 정의합니다 int 별명입니다 System.Int32 정확히 32 비트. 이것을 바꾸는 것은 다음과 같습니다 주요한 변화를 깨뜨립니다.

다른 팁

그만큼 int C#의 키워드는 System.Int32 유형과 이것은 (이름으로 판단) 32 비트 정수입니다. 사양에 :

CLI 사양 섹션 8.2.2 (내장 값 및 참조 유형)는 다음과 같은 테이블이 있습니다.

  • System.Int32 - 32 비트 정수에 서명했습니다

C# 사양 섹션 8.2.1 (사전 정의 된 유형)은 비슷한 표를 가지고 있습니다.

  • int -32 비트 서명 된 적분 유형

이것은 둘 다를 보장합니다 System.Int32 clr에서 int C#에서는 항상 32 비트입니다.

Sizeof (TestInt)가 8일까요?

아니요, sizeof (testint)는 오류입니다. TestInt는 로컬 변수입니다. 연산자의 크기는 인수로 유형이 필요합니다. 항상 오류가되기 때문에 이것은 결코 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 모든 플랫폼에서.

Microsoft가 미래에이를 바꿀 가능성은 거의 없습니다. int 32 비트입니다.

나는 당신이 혼란 스러울 수 있다고 생각합니다. int 별명입니다 Int32 따라서 항상 4 바이트이지만 IntPtr CPU 아키텍처의 단어 크기와 일치한다고 가정하므로 32 비트 시스템의 4 바이트, 64 비트 시스템의 8 바이트가됩니다.

C# 사양에 따르면 ECMA-334, 섹션 "11.1.4 간단한 유형", 예약 된 단어 int 별명이 될 것입니다 System.Int32. 이것은 사양에 있기 때문에 변화가 거의 없을 것입니다.

C# an에서 32 비트 버전 또는 64 비트 버전의 CLR을 사용하든 int 항상 의미 할 것입니다 System.Int32 그리고 long 항상 의미 할 것입니다 System.Int64.

다음의 의지 항상 사실입니다 C#:

SBYTE 8 비트, 1 바이트에 서명했습니다

바이트 서명되지 않은 8 비트, 1 바이트

짧은 16 비트, 2 바이트로 서명했습니다

Ushort 서명되지 않은 16 비트, 2 바이트

int 32 비트, 4 바이트에 서명했습니다

uint 서명되지 않은 32 비트, 4 바이트

64 비트, 8 바이트에 서명했습니다

울롱 서명되지 않은 64 비트, 8 바이트

정수 정확한 일련의 숫자 일뿐입니다 (예 : 314159) 없이 이러한 명시적인 유형 중 하나. C# 순서에서 첫 번째 유형을 할당합니다 (int, uint, , 울롱)에 맞는. 이것은 위의 반응 중 하나 이상에서 약간 혼란스러워 보인다.

이상하게 그만큼 단지 마이너스 연산자 (마이너스 부호) 일련의 숫자 앞에 나타납니다. ~ 아니다 선택을 줄이기 (int, ). 문자 그대로는 항상 긍정적입니다. 마이너스 부호는 실제로 연산자입니다. 아마도 -314159 ~이다 바로 그거죠 같은 것 -((int)314159). 분명히 특별한 경우가 있습니다 -2147483648 곧바로 int; 그렇지 않으면 그럴 것입니다 -((uint)2147483648). 내가 추측하는 것은 불쾌한 일을한다.

어쨌든 C# (및 친구)이> = 128 비트 정수의 "squishy name"유형으로 결코 귀찮게하지 않을 것이라고 예측하는 것이 안전 해 보입니다. 우리는 좋은 지원을받을 것입니다 임의로 UINT128, UINT256 등에 대한 대규모 정수 및 초-프레이즈 지원 등. 64 비트 주소 공간이 있습니다 진짜 큰. 그들이 너무 작다면 그것은 ASLR이나 더 효율적인 mapreduce와 같은 난해한 이유가 될 것입니다.

예, Jon이 말했듯이 'C/C ++ World'와 달리 Java와 C#은 그들이 실행중인 시스템에 의존하지 않습니다. 바이트/짧은/int/long 및 단일/이중 정밀 플로트의 길이가 엄격하게 정의되어 있으며 모든 시스템에서 동일합니다.

접미사가없는 int는 32 비트 또는 64 비트 일 수 있으며, 그 값에 따라 다릅니다.

MSDN에 정의 된대로 :

정수 문자에 접미사가 없으면, 그 유형은 값을 표현할 수있는 첫 번째 유형입니다 : int, uint, long, ulong.

주소는 다음과 같습니다.https://msdn.microsoft.com/en-us/library/5kzh1b5w.aspx

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