2012-11-24 2 views
0

최근에 주어진 n에서 특정 숫자를 검색하는 코드를 작성하려고했습니다. 코드가 완벽하게 작동했지만 10 자리 이상으로 n을 삽입하려고 시도했을 때 실제로 나 빠졌습니다.C 10 자리 넘는 MVS- 입력

분명히 코드와 관련이 없으며 10 자리를 초과 할 수 없습니다. 나는 그것을 11,111,111,111를 공급하려고하면 내가 모르는 뭔가가 있어야합니다 ... 예를 들어

이 간단한 코드

#include <stdio.h> 

int main() 
{ 
    long int n; 

    scanf("%ld", &n); 

    printf("%ld", n); 

    return 0; 
} 

내가 1111111111 먹이 경우는 이하 11 자리 becuase 같은 일을 인쇄 할 것이다 그것은 나에게 뭔가를 줄 것입니다. -1773790777 왜 이런 일이 일어나나요? 내가 뭘 잘못하고 있니?

답변

1

나는 당신이 long int이 32 비트에서 20 억에서 20 억 사이의 값을 유지할 수 있다는 것을 의미하는 32 비트 시스템에 있다고 생각한다. 그 이상을 입력하려고하면 값이 넘어갑니다.

컴파일러가 지원하는 경우 long long int과 같은 64 비트 값을 사용해야합니다.

+0

많은 감사 인사 : D –

1

부호있는 정수의 오버 플로우가 정의되지 않은 동작 입니다.long int은 보유 할 수있는 것보다 큰 숫자를 입력 할 때 오버플로를 일으키는 4 바이트 중 하나라고 생각합니다.