작성
·
926
2
UINT_MAX + 1의 더하기 오버플로우
이진수표현은 이해가 갑니다
1111
+ 1
--------
10000 >> 0000
그런데 0 - 1 빼기 오버플로우
이진수표현은 이해가 안됩니다
10000
- 1
--------
1111
빼기는 어떤 방식으로 계산되는지 이해를 못했습니다
혹시 더하기 방식과 동일하게 앞에 - 기호를 무시하고
0에 1을 대입하는 건가요? ex) 11111 >> 1111
답변 5
2
안녕하세요 답변 도우미입니다.
제가 답변 드리기전에 먼저 자세하게 답변을 해주셔서 제가 답변 작성할 필요가 없어졌네요.😅
하온님 긴 답변 작성하시느라 ㅠㅠㅠ 고생하셨을텐데 지식 나눔해주셔서 감사드립니다. 😊 많은 분들께 도움이 될 것 같아요.
2
자세히 설명해 주셔서 정말 감사합니다
답변해 주신 3가지 예시(공식?)를 천천히 읽으면서 이해했습니다만 가장 이해+외우기 쉬웠던 부분은
0000 앞에 1를 추가 >> 10000
-1 >> - 0001
10000 16 * 1 + 8 * 0 + 4 * 0 + 2 * 0 + 1 * 0 = 16
- 0001 8 * 0 + 4 * 0 + 2 * 0 + 1 * 1 = 1
------
16
1 >> -1
16 - 1 = 15
15 >> 1111
아무래도 제 머리가 단순해서
이 방식이 가장 단순하고 외우기 쉬웠던 것 같습니다
길게 답변해 주시느라 수고하셨습니다ㅠㅠ
다시 한번 감사드립니다(꾸벅)(꾸벅)
2
2진수 뺄샘에는 꿔오는방법과 보상방법이란것이 있는데요, 저도 어려웠고 질문자님도 이해하기어려울것같아서 설명안하려고했지만 여기서부터는 보상방법이란것을 설명할게요.
보상방법은
10000
- 1
-------
가 있을때
10000
-00001
--------
위숫자와 자리수를 똑같이 0을 추가하고 (10000(5) - 1(1) = 4게 0추가)
10000
-11110
--------
1과 0을 반전시키면서
10000
-11111
--------
1을 더합니다. 질문자님은 여기를 햇갈린것같은데 다시확인해주세요.
10000
+11111
--------
101111
-를 +로 바꾸고
결과의 가장왼쪽의 1을 없에면됩니다.
1
이것만으로는 예시가 부족하기때문에 문제를 풀어볼께요.
110
-101
-----
???
무엇일까요?
일단확실한건 오른쪽에서 세번째숫자는 둘다 1이기때문에 지울 수 있습니다.
010
-001
-----
0??
다음은 오른쪽에서 첫번째숫자가 부족해보입니다. 그래서 받아야야하는데 어디서가져오냐면, 두번째숫자에서가져옵니다.
하지만 그대로 가져오면 값이 이상해지기때문에 두번째숫자인1에게 2를 곱하면서 오른쪽으로 옮겨줍니다.
002
-001
-----
00?
그러면 2 - 1이기때문에 정답은 1(001)입니다.
1
안녕하세요. 저는 오버플로우같은것은 몰라서 제가 생각한대로 설명하겠습니다.
2진수 10진수
1111 8 * 1 + 4 * 1 + 2 * 1 + 1 * 1 = 8 + 4 + 2 + 1 = 15
+0001 8 * 0 + 4 * 0 + 2 * 0 + 1 * 0 = 0 + 0 + 0 + 1 = 1
------
10000 15 + 1 = 16 [16] 8 4 2 1니까 똑같죠?
는
1112 8 + 4 + 2 + 2 여기부터 생략할게요.
1120 8 + 4 + 4
1200 8 + 8
2000 16
10000 1112 = 1120 = 1200 = 2000 = 10000 = 16 라서 결국 모두 16입니다.
보기쉽게 설명하면 이렇게 됩니다.(저는 이렇게 생각하는게 이해하기 쉬웠습니다.) 여기까지는 이해하나요?
이해하면 위것을 봤을때 1112와 10000가 같다는것을 알 수 있습니다. 이것을 이해하면
10000 16 * 1 + 8 * 0 + 4 * 0 + 2 * 0 + 1 * 0 = 16
- 0001 8 * 0 + 4 * 0 + 2 * 0 + 1 * 1 = 1
------
1111 16 - 1 = 15
는
1112 8 + 4 + 2 + 2 = 16
- 1 1 = 1
------
1111 16 - 1 = 15
와 같습니다.
설명이 너무길어 죄송합니다.
참고로 알기쉽게 설명하려고했지만 조금바꿨고
010 - 001 = 002 - 001 = 001 가아니라 원래는
010 - 001 =0010 - 001 = 001 라서 2 - 1 = 1는 아니고 10 - 1가 맞습니다.