원리좀알려주세요

조회수 662회

이미지

10진수를 2진수로 바꾸는 코드인데 바뀌는 원리좀 자세히 알려주세요

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • mask 가 2진수로 10000000 부터 시작해서, 01000000, 00100000, ...00000001 까지 변하게 됩니다.

    mask 값에 대하여, num & mask 값이 0과 같은지를 비교하여, 2진수 표현의 각 자리수가 1인지 또는 0인지를 알 수 있습니다. 그래서 3항연산자의 조건에 따라 0 또는 1 을 찍습니다.

    예를 들어, num7이라면, 2진수 표현은 00000111 입니다.

    mask10000000 부터 00001000 까지 변하는 동안에는 num & mask == 0 이란 조건은 모두 참이 됩니다. 그럼 3항연산자의 첫번째인 printf("0") 이 수행됩니다. 그래서 00000 까지 찍힙니다. 이후 mask00000100 부터 00000001 까지 변하는 동안은 모두 거짓이 되어서, 1을 찍게 되어, 결국 00000111 이 출력되게 됩니다.

                       num & mask
     -----------------------------   
     num    00000111  :
     -----------------------------   
     mask   10000000  : 00000000
     mask   01000000  : 00000000
     mask   00100000  : 00000000
     mask   00010000  : 00000000
     mask   00001000  : 00000000
     mask   00000100  : 00000100
     mask   00000010  : 00000010
     mask   00000001  : 00000001
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)