저기.. c언어 한가지 질문좀 부탁합니다..
- 2013.10.29. 23:08
- 1156
지금 < 부호있는 데이터형의 음수 / 오버플로우 >부분을 보고있습니다..
그걸 보면서 이해가 안되는게,
음수형이 되었을때,
그것을 어떻게 읽어야하느냐입니다..
가령, 정수 10을 2의 보수법으로 -10을 만들어보면,
1111 1111 1111 0110
위와 같이 되는데,
이걸보고 "혹시, 숫자0을 양수일때 1로보고 숫자를 계산하고 음수를 붙이면 되는게 아닐까~?" 생각했습니다.
그런데, 오버플로우를 보니

위의 사진의 맨밑에 음수로 변한것을
위에 말했던 0과 1을 바꿔서 생각하고 숫자를 구하면,
2^14 + 2^13 + ... + 2^0 = - (2^15 - 1)
ㄴ이렇게 되어야하는데,
이번에는 또 그렇지 않고
-(2^15)더군요..
c언어에서 부호있는 정수의 음수는 어떻게 읽어야하는건가요,,?
===============================================================
혹시 양수일때의 0과 1을 바꿔서 생각하되,
나온숫자의 크기에 +1을 해주어야하나요?
만약 그렇다면 왜 +1을 해주어야 할까요..?ㅜㅜ
이 댓글을 삭제하시겠습니까?
[육중한 파인애플민트]님의 댓글을 신고합니다.
이 댓글을 삭제하시겠습니까?
[글쓴이]님의 댓글을 신고합니다.
음수의 경우 2의 보수를 취하고, 부호를 붙여줍니다.
글쓴이께서 설명하신 내용은 잘 이해가 되지 않네요.
----- ???
이걸보고 "혹시, 숫자0을 양수일때 1로보고 숫자를 계산하고 음수를 붙이면 되는게 아닐까~?" 생각했습니다.
이 댓글을 삭제하시겠습니까?
[적나라한 편백]님의 댓글을 신고합니다.
일단, 궁금한것 = 음수 2진수를 10진수로 고칠려면 어떻게해야하나?
..이고요,
"혹시, 숫자0을 양수일때 1로보고 숫자를 계산하고 음수를 붙이면 되는게 아닐까~?" <=이건 예를 들어 설명해볼게요
ex) 1111 1111 1111 0110 이게 부호가 있는 정수데이터 일때,
1. 위의 2진수에서, 0 => 1, 1 => 0과 같이 바꾸고 10진수를 구하면
크기는 9이다.(즉, 숫자바꾼다음, 양수의 10진수값 구하는것처럼 크기구함)
2. 1에서 구한값에 +1 해준다. 따라서, 9+1 = 10
3. 원래 부호를 대입해준다. 따라서, -10
제가 생각해본건 이거에요..
이 댓글을 삭제하시겠습니까?
[글쓴이]님의 댓글을 신고합니다.
5를 표현하면 0101 이겠죠?
-(0*2^3) + 1*2^2 + 0*2^1 + 1*2^0 = 5
이렇게 식이 세워지구요
-5를 표현하면 2의 보수 취해서 1011 이죠
-(1*2^3) + 0*2^2 + 1*2^1 + 1*2^0 = -5
이렇게 나옵니다 sign 비트는 -부호 붙여서 계산하면 됩니다
이 댓글을 삭제하시겠습니까?
[활달한 쪽동백나무]님의 댓글을 신고합니다.
이 댓글을 삭제하시겠습니까?
[글쓴이]님의 댓글을 신고합니다.
이 댓글을 삭제하시겠습니까?
[의연한 마름]님의 댓글을 신고합니다.
이 게시물을 삭제하시겠습니까?





