'0007'X는 어떻게 쓰는 것인가요?

게시판 IDL Q&A '0007'X는 어떻게 쓰는 것인가요?

1 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #2844 Reply
      shpark
      회원

      안녕하세요. IDL 공부중인 학생입니다. CALIPSO 위성자료 읽다가 궁금해서요.

      data라는 배열에 다음과 같은 데이터가 있다고 한다면
      data= [1,8221,8221,16413,16413,24605,24605,6]

      data=data and ‘0007’X

      이’0007’X를 적용해 프린트하면
      1 5 5 5 5 5 5 6 으로 나옵니다.

      프로그램상에 있는 설명에 따르면
      위성자료를 2진수로 바꾸어 16 bit 중 첫 3bit(1-3bit)를 선택하는 것이라고 하는데
      실제 나온값들을 직접 계산해보니 위성데이터를 => 2진수로 바꾸고 => 다시 10진수로 바꾼 값이 나오는 것 같더라고요. 여기까진 이해를 했는데…
      제가 필요한 정보는 10-12bit에 대한 정보에요. 그러면 이 ‘0007’X를 어떻게 써야 하는 것인가요?
      ‘0007’X에서 어느 부분이 1-3bit를 고르는 역할을 하는 것인지 모르겠습니다.

      답변 부탁드립니다.

    • #2846 Reply
      mwkim
      회원

      안녕하세요.

      올려주신 내용은 저도 처음 알게되었는데요(마침 비슷한 용도로 사용할 일이 있어서 도움이 될 것 같습니다.)
      IDL 도움말에서 ‘Bitwise Operators’ 도움말을 보시면 보다 이해하기 편하실 것 같습니다.

      위에서 ‘0007’x라고 안하시고 그냥 7로 하셔도 동일한 결과가 나옵니다.
      (오히려 목적에 맞게 하실려면 ‘0000000000000111’b 라고 쓰시는게 좋을 것 같습니다.)

      7이라는 숫자는 IDL에서 16비트 정수로 인식하며 표현하면 다음과 같습니다.
      7 = 0000000000000111
      따라서 7과 AND로 비교하면 뒤의 3비트 부분만 값을 가져오게 됩니다.

      만약 10~12번째 비트를 가져오고 싶으시면 다음 값을 사용하시면 될 것 같습니다.
      0000111000000000 = 3584
      여기서 3584는 계산하셔도 되고 그냥 ‘0000111000000000’b 라고 하셔도 됩니다.

      다만 이렇게 해서 출력해보면 10진수 방식의 정수형으로 표출되는데
      표출할 때 FORMAT='(B016)’ 옵션을 추가하면 2진수로 출력되는 것을 확인할 수 있습니다.

1 답변 글타래를 보이고 있습니다
''0007'X는 어떻게 쓰는 것인가요?'에 답변달기
글쓴이 정보: