2011-08-13 3 views

답변

3

당신은

B = 23,603,264와 C = (200) 사이에 공간이 인쇄되지 않습니다, 모두 int 형의 유효 범위에 . 4 바이트 서명 INT의 기준 최대 값

먼저 b를 선언 할 때 약 2.7b

+0

좋은 관찰, 나는 그것을 놓쳤다 – cnicutar

+0

@ cnicutar 그래, 내가 초 걸렸어 그리고 나서 조금 더 가까이 인쇄 진술을 보았다. –

+1

하지만 어떻게 23603264가 int의 범위에 있다고 말할 수 있습니까? int가 16 비트 컴파일러에 저장할 수있는 최대 값은 65536입니다. – deepaklearner

2

,이 값으로 초기화되지이며,이하지 않은, a >= 400 경우에만 300로 설정되어 . 23603264 200

그리고 200 c,하지만 당신은 즉, 귀하의 출력에 printf("%d %d\n", b, c);

을 공백을 두지 않았다 그리고 23,603,264는 int에서로 해석됩니다 무엇이든 :

그래서 출력은 정말 메모리는 b입니다.

2

코드를 단계별로 살펴 보겠습니다. 당신이 그 (것)의 값을 정의하지 않았기 때문에 그들이 점유 메모리의 알 수없는 내용을 포함 300로 설정 a, 또한 bc :

int a=300,b,c; 

우리는 세 가지 int 변수가 있습니다. 스택 및 힙 메모리는 명시 적으로 그렇게하지 않는 한 특정 값으로 초기화되지 않습니다. a400 이상인 경우

if(a>=400) 
b=300; 

300b로 설정. 잠깐만! a300으로 설정되었으므로 400보다 클 수 없습니다! 따라서 b은 임의의 값으로 남아 있습니다.

c=200; 

세트 c에서 200으로 설정하십시오.

printf("\n%d%d",b,c); 

이렇게하면 "(임의의 숫자) 200"이 공백없이 인쇄됩니다.


나는 위의 텍스트에서 정말로 귀하의 질문에 대답하지 않았다는 것을 깨달았습니다. 숫자가 int의 범위보다 큰 이유는 표시되는 숫자가 실제로는 bc이고 그 사이에 공백이 없기 때문입니다.

1

글쎄, 당신 INT는 적어도 32 비트가 - 그 범위에서 아주 23603264 맞는 (C에서 마지막 200 komes가 제대로 초기화 된) 사람들이 퍼즐을 알아낼 수 있다면

관련 문제