책 내용 질문하기
113쪽 문제3번 질문입니다
도서
2019 시나공 정보처리기사 실기(산업기사포함)
페이지
113
조회수
226
작성일
2019-05-08
작성자
탈퇴*원
첨부파일

~a 가 반전해서 1111 0000 인것은 알겠어요. (a = 15 이므로)

 

궁금한것은요

 

1. not 인데 왜 2의보수를 구해야 하는지

 

2.

   1111 0000 의 2의보수는 0000 0001 이 아닌 0001 0000인지

 

3. 왜 마지막 16에 -를 붙이는지 (반전부호라서그런가요?) 

답변
2019-05-09 10:36:03

안녕하세요 길벗수험서 운영팀입니다.

 

[1]

Java와 C에서 수치값을 저장할 때 맨 앞 비트는 부호비트로 사용하며, 음수는 2의 보수로 표현합니다.

Not(~)을 사용하는 경우 부호비트도 반전되기 때문에 음수로 전환되게 되버리죠.

결국 ~ 비트연산을 통해 음수가 되어버린 비트를 10진수로 표현하기 위해서는 2의 보수화를 하여 값을 구해야 합니다.

 

 

[2]

2의 보수화는 여러가지 방법이 있지만 그 중 하나는 not 수행(1의 보수화) 후, +1을 수행하면 됩니다.

1111 0000  에서 not 수행하면

0000 1111  이 되며, 여기서 +1을 수행하면

0001 0000  이 됩니다.

 

이진수 0001 0000은 10진수로 변환하게 되면 16이죠.

 

 

[3]

2의 보수의 목적을 생각하셔야 합니다.

해당 비트가 (-)음수임을 표현하기 위해 2의 보수로 표현한 것입니다.

때문에 재차 2의 보수를 수행하여 원래 값을 찾은 후, 해당 값에 음수 표시를 해 주어야 올바른 값이 됩니다.

(1010 -> 2의 보수화 -> 0110 -> 2의 보수화 -> 1010)

 

행복한 하루되세요 :)

  • 관리자
    2019-05-09 10:36:03

    안녕하세요 길벗수험서 운영팀입니다.

     

    [1]

    Java와 C에서 수치값을 저장할 때 맨 앞 비트는 부호비트로 사용하며, 음수는 2의 보수로 표현합니다.

    Not(~)을 사용하는 경우 부호비트도 반전되기 때문에 음수로 전환되게 되버리죠.

    결국 ~ 비트연산을 통해 음수가 되어버린 비트를 10진수로 표현하기 위해서는 2의 보수화를 하여 값을 구해야 합니다.

     

     

    [2]

    2의 보수화는 여러가지 방법이 있지만 그 중 하나는 not 수행(1의 보수화) 후, +1을 수행하면 됩니다.

    1111 0000  에서 not 수행하면

    0000 1111  이 되며, 여기서 +1을 수행하면

    0001 0000  이 됩니다.

     

    이진수 0001 0000은 10진수로 변환하게 되면 16이죠.

     

     

    [3]

    2의 보수의 목적을 생각하셔야 합니다.

    해당 비트가 (-)음수임을 표현하기 위해 2의 보수로 표현한 것입니다.

    때문에 재차 2의 보수를 수행하여 원래 값을 찾은 후, 해당 값에 음수 표시를 해 주어야 올바른 값이 됩니다.

    (1010 -> 2의 보수화 -> 0110 -> 2의 보수화 -> 1010)

     

    행복한 하루되세요 :)

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.