Q&A

  • 비트연산인데 설명을 좀..........
function bits(x : LongWord; k, j : integer): LongWord;

begin

Result := (x shr k) and not(not 0 shl j);

end;



위에 것을 설명좀 해주세요......

(x shr k) - 는 알겠는데 (not 0 shl j)를 모르겠거든요.....

그리고 이것이 x에 대해서 좌측으로 k번 비트에서 우측으로 j개의 비트를 뽑아내는 기능을 가진 함수라고 했는데 어떻게 해서 되는지.....

만약 1 0 1 1 0 1 0 1 이란 수가 있을경우 저는 세번째와 네번째에 있는 11을 뽑아내고 싶거든요... 어떻게 되는지 설명을 좀 부탁드립니다.



1  COMMENTS
  • Profile
    최용일 2001.03.21 22:07
    안녕하세요. 최용일입니다.



    x shr k = 10110101 shr 4 = 00001011

    not 0 shl j = not 00000000 shl 2 = 11111111 shl 2 = 11111100



    (x shr k) and not (not 0 shl j)

    = 00001011 and not (11111100)

    = 00001011 and 00000011

    = 00000011



    왼쪽으로 쉬프트했다 오른쪽으로 쉬프트하시면 됩니다. (아래는 8비트일경우)

    하지만 역시 위의 코드처럼 비트마스크를 쓰는게 정석이죠...



    (10110101 shl 2) shr 6

    = 11010100 shr 6

    = 00000011



    ^^ 항상 즐코하세요...



    장훈이 wrote:

    > function bits(x : LongWord; k, j : integer): LongWord;

    > begin

    > Result := (x shr k) and not(not 0 shl j);

    > end;

    >

    > 위에 것을 설명좀 해주세요......

    > (x shr k) - 는 알겠는데 (not 0 shl j)를 모르겠거든요.....

    > 그리고 이것이 x에 대해서 좌측으로 k번 비트에서 우측으로 j개의 비트를 뽑아내는 기능을 가진 함수라고 했는데 어떻게 해서 되는지.....

    > 만약 1 0 1 1 0 1 0 1 이란 수가 있을경우 저는 세번째와 네번째에 있는 11을 뽑아내고 싶거든요... 어떻게 되는지 설명을 좀 부탁드립니다.

    >