티스토리 뷰

반응형

※ 본 포스팅은 개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있음을 밝힙니다.


예1) int 자료형에서 데이터 overflow시 전혀 다른 값이 나오는 이유

int 자료형은 2byte의 크기의 메모리를 사용한다. 2byte bit로 환상하면 16bit가 되는데 그 중 1bit는 양, 음수를 판별하는 부호로 사용된다. 그래서 실제론 15bit를 사용하는데, 이는 unsigned int signed int의 표현 범위가 달라지는 이유이기도 하다.(unsigned는 부호비트 1bit를 연산비트에 더해 16bit를 사용하기 때문에) 만약 int형 변수(signed int) 15bit로 표현하기 부족한 값이 들어간다면 그 오버된 값이 2진수로 변환되어, 그 값이 15bit에 잘려서 들어가게 된다. 그 과정에서 부호 비트를 건드릴 수도 있는데 부호비트가 1이 되면 음수로 표현되므로, 출력 시 전혀 엉뚱한 값이 나오게 되는 것이다.(심지어 음수표현을 2의 보수법으로 하기 때문에 더더욱 엉뚱한 값이 튀어나온다.(2의 보수 : 2진수에 1의 보수+1)



반응형
공유하기 링크
태그 클라우드
,
프로필사진

Yowu (Yu Yongwoo)

흔한 Node.js/Java 백엔드 개발자입니다
Ubuntu와 MacOS 데스크탑 개발 환경을 선호합니다
최근에는 vscode와 IntelliJ를 사용하고 있습니다
vscode에는 neovim, IntelliJ는 ideaVim
개발용 키보드는 역시 HHKB Pro 2 무각입니다
락 밴드에서 드럼을 쳤습니다

  • 프로필사진 BlogIcon 한호정 궁금한게있습니다

    int형은 4바이트 아닌지요?
    2014.08.13 18:34
  • 프로필사진 BlogIcon Yowu 현재는 대부분이 4byte가 맞습니다.
    제가 아마 저 자료를 조사할 때 예전 자료들을 조사해서 그럴겁니다.
    현재는 CPU 아키텍쳐가 64bit 까지 있지만 예전에 16bit 기반 프로세서에서는 int를 2byte로 처리했습니다. ㅜㅜ. 혼동을 드려 죄송합니다.
    관련 자료 : http://sckllo7.tistory.com/3
    2014.08.14 14:47 신고
댓글쓰기 폼
«   2022/05   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
글 보관함
Total
3,335,200
Today
55
Yesterday
223