해결된 질문
작성
·
78
답변 5
0
맨 앞자리가 부호를 나타내고 나머지를 10진수로 변환하면 정수 값이 반환 된다는 것은 반은 맞고 반은 틀린 말입니다.
양수인 경우는 부호 숫자 외 나머지 수를 10진수로 변환하면 그 값이 저희가 알고 있는 값이 맞습니다.
이진수 (0111) 로 예를 들어보도록 하겠습니다.
맨 앞 0 은 양수를 나타내고 나머지 111 => 4 + 2 + 1 = 7 이 됩니다.
하지만 음수인 경우는 다릅니다.
이진수 (1111) 로 예를 들어보면
맨 앞의 1은 음수를 나타내고 나머지 111 => 4 + 2 + 1 = 7 의 부호만 - 를 붙여 -7이 되는 것이 아닙니다.
먼저 1의 보수 후, 2의 보수를 진행하고 부호를 붙여야 음수를 구할 수 있습니다.
1의 보수 => 0000
2의 보수 => 0001 = 1 => 부호 추가 => -1 이 됩니다.
위 계산을 또 다른 방식으로 해석하면
1111 에서
맨 앞자리(부호 -): 2^3 = -8
두번째 자리(+) : 2^2 = 4
세번째 자리(+) : 2^1 = 2
네번째 자리(+) : 2^0 = 1
---------------------------
결과 = -1
이 됩니다.
사람 입장에선 어려워 보일 수 있으나 컴퓨터 입장에선 훨씬 연산이 쉽고 효율적입니다.
컴퓨터 시스템이 2보수 방식으로 계산되는 뺄셈 예제를 보여드릴게요
다음은 5-3
에 대한 예제입니다.
0101 (5)
+ 1101 (-3, 2의 보수)
-------
10010 (5비트가 되지만, 맨 앞(왼쪽) 1비트는 버림)
남은 4비트는 0010 => 결과는 2
따라서 다음과 같은 장점이 있습니다.
2의 보수 표현을 사용하면 덧셈과 뺄셈을 같은 방식(가산기)으로 계산할 수 있습니다.
예를 들어, 5 + (-3)을 계산할 때, -3을 2의 보수로 바꿔서 5에 더하면 결과가 바로 나옵니다.
별도의 뺄셈 회로가 필요 없습니다.
1의 보수 방식(모든 비트를 반전)에서는 +0과 -0이 모두 존재(예: 0000=+0, 1111=-0)해서 혼란을 줍니다.
2의 보수에서는 0을 한 번만 표현할 수 있습니다.
2의 보수에서는 오버플로우(자릿수 초과) 발생 시, 하위 비트만 남기면 결과가 올바릅니다.
수식이 단순해서 컴퓨터 하드웨어 설계가 쉬워집니다.
0
아... 혹시 이런뜻인거 같은데.....
~ 연산 이라는게 비트상에서 서로 대척점에 있는 수를 나타낸다고 보면될까요
예를들면 10진수로 ~127에서128까지 쭉 줄세워 놓으면 맨왼쪽 -127의 숫자 맨오른쪽 128의 숫자가 서로 딱 대척점이고,
또 -126의 대척점은 127 입니다.( 서로 맨왼쪽에서 한칸 맨오른쪽에서 한칸씩 이동한것이기 때문에 )
이 수를 2진수로 컴퓨터에 입력되고 다시 출력될때는 10진수로 출력된다는 뜻으로 이해하면 되나요?
이것을 컴퓨터 연산은
1의보수 더했다가 음수로 저장하고 다시 1의보수 더했다가 또 1더했다가 이렇게 복잡하게 한다라는 걸로 이해하면 되는거죠?
그리고 AI는 질문을 4개올렸는데 전부 똑같은 답변만 하는거 같네 ...
0
0
정확하게 이해가 안 되네요 ~연산자의 의미를 모르겠네요 0000 0101에서 1의보수로 바꾼 후 다시 1의보수로 바꾸고 더하기 1을 하는이유가 뭐죠? 음수로 나타낼거면 그냥 맨앞에 0을1로 바꾸고 출력하면 되는거아닌가요?
~가 어떤 연산지인지 정확하게 의미를 모르겠습니다 답변이 영상에 나오는 내용과 똑같아 의문점이 해소되지 않네요.
검색해봐도 다 내용을 똑같이 알려주네요 ㅠ
0
안녕하세요, 인프런 AI 인턴입니다. Qwe Asd님.
비트 연산에 대한 질문을 주셨군요! C#에서 ~
연산자는 비트 단위 반전(NOT 연산)을 수행합니다. 이는 각 비트의 0과 1을 서로 뒤바꾸는 것을 의미합니다. 여러분의 질문을 해결하고자 비트 연산에 대해 간단히 설명하겠습니다.
비트 반전(~) 연산자:
~
연산자는 각 비트를 뒤집습니다. 예를 들어 0000 0101
이라는 바이너리 숫자는 ~0000 0101
을 수행하면 1111 1010
이 됩니다.2의 보수 표현:
1111 1010
의 2의 보수를 계산할 때, 이미 ~
연산으로 뒤집은 상태에서 1을 더하면 1111 1011
이 됩니다. 이는 10진수로 -6
을 나타냅니다.접두어 이해:
0
이면 양수, 1
이면 음수를 나타내는 것은 표준적인 2의 보수 표현 방식입니다. 이는 컴퓨터 구조에서 일반적으로 사용되는 방법입니다.이해를 돕기 위한 추가 자료:
위 설명과 자료들이 이해에 도움이 되시기를 바랍니다. 혹시 질문에 대해 추가적으로 더 알고 싶으신 부분이나 다른 궁금한 점이 있으시면 언제든지 질문해 주세요!
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.