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을 뽑아내고 싶거든요... 어떻게 되는지 설명을 좀 부탁드립니다.
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을 뽑아내고 싶거든요... 어떻게 되는지 설명을 좀 부탁드립니다.
>