본문 바로 가기

학습 Q&A

강의 내용 궁금증! 교수님이 직접 답변 드립니다.

  • 홈
  • 커뮤니티
  • 학습 Q&A
  • 학습 Q&A

Q&A 메뉴.png

※ 유의사항
강의에 나오지 않는 내용에 대한 풀이나 해설은 답변을 드릴 수가 없습니다.
학습과 무관한 내용 및 비방/욕설 등 게시판 성격과 무관한 내용은 사전 고지없이 삭제됩니다.
답변 완료된 게시글은 수정 및 삭제 불가합니다.

게시판 글보기
제목 답변완료 2진법관련해서 문의 드립니다.
질문유형 강좌내용 교수님 권준표
과목 매트랩 강좌명
작성자 학* (p******2) 등록일 2017-03-27 21:24

궁금한것이 음수를 이진법으로 나타내려면 2의 보수법을 사용해야 한다는데 그 방법을 잘 모르겠습니다. 

답변 완료된 질문과 답변은 수정 및 삭제가 불가합니다.

댓글
0
권*표 교수님

인터넷에 쉽게 설명해 둔 글이 있어 전해드립니다.

 

http://o.playgm.co.kr/427

 

○ 개념
보수는 뺄셈을 덧셈으로 계산할 때 사용합니다.
예를 들어보자면,
 
80 - 48이라는 식이 있다고 했을 때, 48의 10의 보수는 52.
80 + 52 = 132이고요, 여기서 삐져나온 자릿수 100을 빼면 32가 됩니다.
 
어떤가요? 뺄셈을 덧셈해도 뺄셈 계산이 되지요?
컴퓨터 CPU에서는 이러한 방식으로 뺄셈을 2의 보수를 취해서 덧셈으로 계산합니다.
 
○ 공식
 
진법은 2진법, 8진법, 10진법, 16진법 등이 있지요?
모든 진법에는 2가지의 보수가 존재하는데, 만약 R진법이라면 R의 보수와 R-1의 보수가 존재합니다.
즉 10진법에는 10의 보수와 9의 보수가 존재하고, 2진법에는 2의 보수와 1의 보수가 존재하겠지요.
 
이러한 보수를 구하는 공식은 다음과 같습니다.
R진법 N자릿수 X의 R의 보수: R의 N승 - X
R진법 N자릿수 X의 R-1의 보수: R의 N승 - 1 - X
 
즉, 10진수 567의 9의 보수는, 10의 3승 - 1 - 567 = 999 - 567 = 432가 됩니다.
10의 보수는 공식에 의하면, 이전 보수(9의 보수)에서 +1을 취하면 되겠지요, 즉 433이 됩니다.
(이처럼 R-1의 보수를 구했다면, R의 보수는 R-1의 보수에서 +1만 하면 되니 참 쉽지요?)
 
그냥 간단하게 생각하시면 됩니다.
10진수 567의 9의 보수는, 567을 999로 만드는 숫자입니다.
마찬가지로, 8진수 742의 7의 보수는, 742를 777로 만드는 숫자입니다.
 
○ 1의 보수
 
2진법의 1의 보수는 조금 특별합니다.
그냥 비트 전체를 반전시키면 1의 보수가 됩니다.
EX) 2진수 00110010의 1의 보수는 -> 11001101
 
○ 2의 보수
 
2의 보수는 1의 보수에서 +1을 하면 되지만, 더 쉽게 구할 수도 있습니다.
그냥 비트의 최하위 비트(LSB, 가장 오른쪽 비트)에서부터 1을 만날 때까지 그대로 쓰고, 1 뒤에부터는 반전하여 쓰면 됩니다.
EX) 2진수 11010010의 1의 보수는 00101101, 여기에 1을 더하면? 00101110

EX) 2진수 11010010의 2의 보수는 0 -> 10 -> 1을 만났으니까 나머진 역으로, 00101110 

 

 

○ 매틀랩에서 2의 보수를 구하는 함수

- 예제를 아래 적어드리니, 한 번 분석해 보셔요~

 

%% 2의 보수
% a = matrix 형태로 된 binary 값
% factor = scale factor , 기본은 `1`

 

function value = twocomp (a ,factor)
% MSB(a(1), 최상위비트)가 0일 때 양수 이므로 그대로 10진수로 변환
  if a(1) == 0
    value =  sum( a .* 2.^[ factor+length(a)-1 : -1 : factor ])
% MSB(a(1), 최상위비트)가 1일 때 음수
% 1의 보수를 취한 후 1을 더하고 음수를 취함.
  else
     a = (1 - a ) ;
     a(length(a)) = a(length(a)) + 1 ;
     a(1) = [] ;
     value =  - sum( a .* 2.^[ factor+length(a)-1 : -1 : factor ])
 end
end

  • 2017-03-28
  • 2024-12-12 수정