while 문에 대한 질문입니다.
누리봄
질문 내용 : 지금 while 문을 이용해서 팩토리얼 구하는건데요..
스크린샷 보듯이.. 17! 부터는 음수가 나오더니 34부터는 0이 출력됩니다. 이거 왜그런가요??
앞에서 공부한걸 보니깐 signed int 범위가 2147483647 이 최고로 표현된다는데.. 10! 이도 이 범위를 넘어서는 정상출력 되는데..
왜 그 이상 수는 음수 또는 0으로 출력되는지 알고 싶습니다.
-
콘라드
BigInt 사용해보세요 어디선가 들은 얘기
-
피스케스
64비트 정수라고 32비트 정수와 다를거 없습니다. 그저 비트수만 좀 더 늘어난거죠.
-
맑은
아직 거기까지 공부를 안해서 어떻게 쓰는지 몰라요...ㅎ; 우선 32비트 먼저 제대로 이해하고 구사할수 있을때 64비트까지 확장해서 공부해야겠네요
-
꽃
__int64형을 쓰시면 몇조까지 가능한걸로 알고있어요
-
황예
답변 감사합니다^^
-
라이브라
10!은 signed int 형의 최대값인 21억을 넘지 않습니다. 때문에 정상 출력됩니다.
16!도 가까스로 21억을 넘지 않네요 20억정도 나오니까말입니다
하지만 17!부터는 21억을 넘어서 정상적으로 출력되지 않네요 -
꽃큰
#include stdio.h
void main()
{
int a=2147483647;
int b=2147483647+1;
int c=2147483648*2+1;
int d=2147483648*2+2;
printf(\%d\\n\ -
good
-2147483648~2147483647... 이범위 말하신건가요??
-
하루키
간단합니다. 그냥 한바퀴 돌아서 그런겁니다....
-xxxxx ~ +xxxxx (제가 정확한 범위 모르므로 ㅠㅠ)
이범위만큼 순환하는데 운좋게 +쪽에걸리면 나오는거고 최대양의값이상이면서 다시 +로 못넘어올만큼의
숫자이면...-가 되겠죵...