This website is a clone of OTD.KR - it only exists to maintain the historical information that OTD once housed, and to act as a monument to this incredible, passionate community. Nothing presented here is the original work of kbdarchive.org

❤️ 길을 열어주셔서 감사합니다 ❤️


  • Community(커뮤니티)
  • Otd Info(소식&정보)
  • Forum(포럼)
  • Tip & Tech(팁&테크)
  • Diary(다이어리)

Freeboard 자유게시판

자유롭게 글을 남기는 공간입니다.
이미지 파일은 Album 게시판을, 자료는 PDS 게시판을 이용해주시면 감사하겠습니다.
 
작성일 : 10-11-22 11:39
자바 이항연산에서 int타입 연산 질문이요...
http://l.otd.kr/VDPFB3I5
 글쓴이 : GON1
조회 : 456  

Q/A에 올리지 않은 이유는...

 

질문 자체가 가볍고 낮은 수준일 뿐만 아니라...

페이지 넘어가면 검색으로 검색하기도 어려운 질문인지라...

(그리고 가장 큰 이유는 요새 자게 검색율이 가장 좋아서 ㅋㅋ)

 

그래서 여기에 올립니다.

 

자바 공부하다가

각 타입별 크기에 대해서 배우고, 연산을 공부했습니다.

 

int타입의 경우 4바이트이고 범위가 최대 약 20억으로 알고 있는데요...

 

int a = 1000000;  // 10^6

int b = 2000000;  // 2 * 10^6

long c = a * b; //   ==> 여기서 에러가 난다네요...

 

오버플로우가 발생해서 에러가 난다는데,,.,

int의 최대값은 약 20억이 조금 넘어가지 않나요? 그러면 2 * 10^12는 20억이니까 int의 최대값을 넘지 않는 것 아닌지요?

 

그러면 오버플로우가 발생할 이유가 없지 않은가 해서요...

 

이 부분이 잘 이해가 안됩니다. -0-;;


GON1 [Lv: 126 / 명성: 633 / 전투력: 4177] 10-11-22 11:40
 
3번째 라인에서 long c = a * b; ==> long c = (long)a * b; 로 a를 형변환해서 하면 에러가 안나는 것은 당연한건데... 변환 안해서 int의 범위를 넘지 않는 것 같아서요... 왜 오버플로우 발생합니까?
GON1 [Lv: 126 / 명성: 633 / 전투력: 4177] 10-11-22 11:46
 
아고 혼자 북치고 장구치고 다 하네요... 10^12는 10억이 아니라 1조네요... ㅜㅜ
빌리언과 트릴리언을 착각을 하다니... -0-;;
이 글 자체를 잠시 후 폭파시키겠습니다. ㅜㅜ
horus110 [Lv: 32 / 명성: 752 / 전투력: 1256] 10-11-22 11:56
 
어차피 폭파시키겠지만.. 참고드리면 저렇게 큰 수 다를 경우, 그냥 메모리 생각하지 마시고
long 쓰시거나 자릿수를 위로 끌어올려서 유효숫자만 int로 저장하세요.
괜히 딱 맞게 형 최적화하려다 오버플로우 나오면 디버깅하기만 골치아파지는 수도 있어요..
GON1 [Lv: 126 / 명성: 633 / 전투력: 4177] 10-11-22 12:01
 
형 최적화라니요 ㅋ 아직 코딩못해요 ^^;
int와 long의 크기와 연산시 오버플로우 나는 예를 공부하다가 저게 나왔더라고요 ^^;
말씀하신 내용 잘 참고할께요...

P.S. 그런데 다 long으로 때려버리면... 안드로이드에 올릴 때 발적화 소리 듣지는 않을까요? -0-;;
horus110 [Lv: 32 / 명성: 752 / 전투력: 1256] 10-11-22 12:10
 
그 크기의 값을 꼭 저장해야한다면 어쩔 수 없는 거죠.
아니면 두번째로 적은 것처럼 오차 여유 감안해서 필요한만큼 유효숫자만 떼서 저장하시면 되구요..

변수 큰 거 몇개쯤 썼다고 느려질 일은 거의 없어요.
차라리 그런 게 걱정이라면, 가능한 floating point는 사용 자제하는 게 좋을 거구요.
고속 연산기 포함이 된 AP라 해도 정수만 사용하는 연산에 비하면 훨씬 느리니까요.
근데 이런 건 신호처리 같이 대량의 데이터를 한번에 처리할 때나 문제되고..
어지간한 어플은 그냥 짜도 될겁니다. 성능 최적화가 문제될만큼 성능이 중요한 시대는 아닌 것 같네요..
어떤 기능을, 어떻게 동작시킬지, 그리고 그것을 얼마나 쉽고 독창적으로 구현할지가 더 중요하죠..
GON1 [Lv: 126 / 명성: 633 / 전투력: 4177] 10-11-22 12:18
 
네 감사합니다. 어차피 정수 단위에서는 별 차이 없으니 그냥 쓰고, 실수 범위로 갔을 때 주의하면 되는군요. 그나마도 제가 앱을 짤 정도 수준까지 갔을때는 이미 듀얼코어 나와있을테니... -0-;
일단은 최적화 생각하지 말고 아이디어 구현을 먼저 해보고, 안되면 최적화시키는 방향으로 하면 되겠네요...
TheBits [Lv: 64 / 명성: 657 / 전투력: 3135] 10-11-22 12:37
 
컴퓨터는 멍청합니다.. 손으로 끄적대도 계산 하는걸 못하니까요 ㅋㅋ
하늘붕붕 [Lv: 72 / 명성: 725 / 전투력: 1792] 10-11-22 12:57
 
정답~!!!!
단, 무지 빠르고, 엄청난 수도 계산한다는것만 빼고... ㅡㅡ;;;;
악바리 [Lv: 38 / 명성: 755 / 전투력: 2474] 10-11-22 13:24
 
기억 안나는 동영상은 척척 틀어주던대요??
힘내라아빠 [Lv: 786 / 명성: 745 / 전투력: 29815] 10-11-22 13:04
 
;;;;;;;;;;;;;;;;;;;
화이트핸드 [Lv: 206 / 명성: 668 / 전투력: 7049] 10-11-22 13:27
 
질문은 질문 게시판으로~~~쓩~~~~

ㅋㅋㅋ

제가 아는바가 없으니 이런 댓글 밖에는 못다는 군요.
젝리 [Lv: 99 / 명성: 653 / 전투력: 6683] 10-11-22 13:33
 
옛날 모바일 프로그래밍할때는 메모리 용량때문에 한줄로 코딩했다는....^^;;
모기채 [Lv: 92 / 명성: 639 / 전투력: 2931] 10-11-22 14:48
 
아는게 없으니... 슬프군요
Ujos [Lv: 273 / 명성: 635 / 전투력: 13371] 10-11-22 21:47
 
학습태도 좋아요 ㅎㅎ
한량 [Lv: 89 / 명성: 755 / 전투력: 5899] 10-11-22 22:09
 
ㅋㅋ 공부 열심히 하시는 군요..
 


SIDE MENU

Otd Wiki 무엇이든 물어보세요!
Otd
Lotto
누적 포인트 1,799 p
Otd Chat 강냉이 Beta !
Otd
Hands
왼쪽메뉴 숨기기
왼쪽메뉴 펼치기
Loading...