2013-03-31 2 views
0

둘 다 &이 긴 정수를 시작한다고 선언합니까?"long int num = 24;" 및 "int num = 24L;" 똑같은 일을합니까?

나는이 포럼에 대해 너무 기본적인 질문이 아니길 바란다. 위의 두 문장 모두 똑같은 것을 달성했는지, 즉 긴 정수 변수 num을 선언하고이를 24로 초기화하는지 알고 싶다. 감사합니다.

+3

그들은 동일한 표현을 메모리에 생성 할 수 있습니다 ... 표준에 따르면 'long int'와 'int'가 같기 때문에 (플랫폼에 따라 다릅니다!) 보장 할 수 없습니다. – Yahia

+1

@Yahia'long int'와'int'는 결코 같지 않습니다 (표현과 정렬 요구 사항이 같을 수도 있지만 ...). – pmg

+0

@pmg 당신 말이 맞아요, 그게 내가 의미하는 바 ... 나는 내 말씨가 그 것을 반영하도록 바꿨습니다. – Yahia

답변

4

아니요, long int은 long int를 선언하고 int은 int 변수를 선언합니다. 변수의 유형은 "초기화 된"값 (더 정확하게는에 할당 된 값)에 의존하지 않습니다. 따라서 형식이 long intint 인 경우에만 두 선언이 동일합니다. 변수의 입력 변수의 타입에 의해 정의된다

+0

두 번째 문장에서 24 이후에 접미사 L을 알지 못했을 까봐 두렵습니다. –

+2

나는했다. 그러나 접미사는 변수의 유형에 영향을 미치지 않습니다. – JohnB

+0

"int num = 24L"이라고 가정하면 시스템이 size (int) 바이트 수 대신 sizeof (long) 바이트 수를 저장하도록 강제합니다 (다른 경우). 그러면 정수 포인터를 사용합니다. 역 참조 또는 long 정수 포인터? –

1

호은 그 왼쪽에 타입에 의해 정의된다 :

  • long int num 긴 INT와 같은 변수를 선언 num;
  • int num은 변수 num을 int로 선언합니다.

한편, 등호의 오른쪽도 독립적으로 정의됩니다.

  • 24은 int입니다.
  • 24L
  • 긴 INT

오른편이다 (이 경우 24 또는 24L) 그런 강제 될 수있다 ( 변경)이 경우, 변수의 (좌측에 맞게 num)이지만, 결코 다른 방법 라운드.

6

long int num = 24;int num = 24L이 같은가요?

그들은 다릅니다.

첫 번째 변수는 long int 변수를 "생성"하고 할당 전에 int 값 24를 long int 유형으로 암시 적으로 변환합니다. 두 번째 변수는 int 유형의 변수를 "생성"하고 할당 전에 long int 값 24를 int 유형으로 암시 적으로 변환합니다.

1

변수의 유형과 변수 초기화에 사용되는 상수 유형을 구별해야합니다.

첫 번째 선언은 long int 변수를 선언하고 (당신이 long int-24 상수 정수를 캐스팅 한 후 무엇을 얻을입니다) 값 24L에 초기화합니다. 두 번째 선언은 int 변수를 선언하고 값 24에 초기화 (당신이 int24L 일정한 긴 정수를 캐스팅 한 후 무엇을 얻을이다.) 정확히

2

하지 않습니다.long intint은 보장되지는 않지만 크기가 서로 다른 것으로 가정합니다. 24는 int 형이기 때문에

long int num = 24; 

이 그 long int 승진 (암묵적으로)입니다, 안전합니다.

int num = 24L; 

이것은 일반적으로 안전하지 않습니다. 24Llong int을 정의합니다. 즉, "잘 렸습니다"는 int이고 sizeof(int) 이면 문제가 될 수 있습니다.

왜 "IN 일반"과 "할 수있는"? 이 경우 두 가지가 같고 안전합니다.

x 큰 숫자가
int num = xL; 

, 즉 intlong int에 들어갈 수는 없지만 : 그러나 가정 그런 짓을? 그런 다음 오버플로가 발생했습니다.

+0

"얇게 썬 것 (sliced)"대신에 "잘린 (truncated)"이라고 말하는 것이 더 나을 수도 있습니다. – jszakmeister

+0

@jszakmeister - 감사합니다. '얇게 썬 것'이 올바른 단어가 아니라는 것을 알고 있습니다. 그래서 그것을 따옴표로 묶었습니다. –