2011-03-22 2 views
0
class Program 
{ 
    static void Main(string[] args) 
    { 
     Int64 a = Int64.MaxValue; 
     Int64 b= Int64.MinValue; 

     try 
     { 
      checked 
      { 
      Int64 m = a * b; 

      } 
     } 
     catch (OverflowException ex) 
     { 
      Console.WriteLine("over flow exception"); 
      Console.Read(); 
     } 
    } 
} 

변수가 int로 선언 된 경우 컴파일 오류가 발생하며 변환은 int에서 long으로 변환됩니다.int32, int64의 별칭

  1. int가 사용되지만이 오류가 발생합니다.
  2. 별칭 Int32
  3. Int64Int32Int64, 그것은 OS에 의존 않습니다 사용할 수있는 무엇입니까?
+0

프로그램이 실행될 때 [Int32 대 Int64 대 Int (C#)] (http://stackoverflow.com/questions/1680111/int32-vs-int64-vs-int-in-c) – LukeH

답변

5

Int32Int64long에 대응 int에 대응한다. 가장 일반적인 용도로는 32 비트 정수를 사용할 수 있습니다. 그러나 매우 큰 숫자가 필요하면 long 정수 (64 비트)를 사용하십시오.

당신이 intInt64.MaxValue를 할당

, 당신은 암시 적으로 작동하지 않는 int ( Int32)에 long ( Int64)를 변환하고 있습니다. 게다가, 그 값은 너무 커서 32 비트 정수에 맞지 않습니다.

1
Int32 = int 
Int64 = long 

CTS 구현은 모든 CPU/OS에서 이식 가능한 유형을 보증합니다.

0

는 INT32 및 INT64

Int32의 별칭 int입니다 별명은 무엇입니까. Int64의 별칭은 long입니다.

Int32 및 Int64를 사용하는 경우 OS에 따라 다릅니 까?

Int32 또는 Int64를 사용할지 여부는 응용 프로그램 (범위, 부호 요구 사항)에 따라 다릅니다. 그리고 아니요, NOT은 OS에 따라 다릅니다. int은 .NET Framework와 관련하여 항상 4 바이트 길이의 Int32입니다. 별칭은 컴파일러의 기능이기도합니다. 따라서 long은 C#에서 프로그래밍 할 때 의미가 있지만 Array.LongLength과 같은 속성 이름처럼 필요하지 않은 VB.NET 개발자는 long이 이해가되지 않는다고 생각합니다.

0

1) 어디에서나 int를 사용하면이 오류가 발생하지 않아야합니다. 미세 다음 작품 :

using System; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     int a = int.MaxValue; 
     int b = int.MinValue; 

     try 
     { 
      checked 
      { 
       int m = a * b; 

      } 
     } 
     catch (OverflowException ex) 
     { 
      Console.WriteLine("over flow exception"); 
      Console.Read(); 

     } 
    } 
} 

2) Int32int를 사용하여 별명이는 Int64이 플랫폼 특정되지 않습니다) long

3 사용 별명, 오히려 C#을 사양에 의해 정의된다. 모든 플랫폼에서 동일합니다. 32 비트 정수가 필요한 경우 Int32 (또는 int)을 사용하고 64 비트 정수가 필요한 경우 Int64 (또는 long)을 사용하십시오.이것은 논리/알고리즘 결정보다 플랫폼 관련 문제가 아닙니다.

+0

가능한 중복 런타임 오류가 발생합니다. make a와 b에 상수가 있으면 컴파일 오류가 발생합니다. 왜 그런 차이가 있습니까? – Raghav

+0

@Raghav : 컴파일러가 상수를 도울 수 있습니다. 상수가 없으면 런타임 오류가 발생합니다. 컴파일러는 할 수있을 때 도움이되지만 항상 모든 것을 할 수는 없습니다. 컴파일러 오류를 "유용한 추가 사항"이라고 생각하십시오. –

0

System.Int32System.Int64은 CLI 표준 (ECMA-335)에 정의 된 유형입니다. 그것들은 기본적으로 32 비트 및 64 비트 정수에 대한 유형의 CLR/프레임 워크 버전이며, 이식성이 보장됩니다.

일부 언어는 C#과 같은, 그 유형 별칭을 정의 - 결과적으로 그 종류도 이식 - C#을 System.Int64와 동일하게 System.Int32long와 동일하게 int을 정의합니다.

(CLR 버전 대 언어 버전) 적어도 하나의 언어 만 사용하는 경우 스타일이 중요합니다. 필자는 가능한 경우 언어 별 별칭을 CLR 유형에 사용하는 것을 개인적으로 선호합니다.