《 Programming in Lua 3 》 독서 노트 (15)

3055 단어
날짜: 2014.7.22
PartⅢ     The Standard Libraries
19 The Bitwise Library
비트 연산 라 이브 러 리
lua 의 비트 연산 은 수치 유형 이 부동 소수점 이기 때문에 지원 효과 가 좋 지 않 습 니 다.
lua 에서 일부 비트 연산 을 이용 하여 일부 알고리즘 을 실현 합 니 다.예 를 들 어 왼쪽 이동 은 곱 하기 2 에 해당 하고 오른쪽 이동 은 나 누 기 2 에 해당 하 며 위치 와 위치 또는 이 두 개념 에 대해 추가 적 으로 토론 해 야 한다. 이것 도 부동 소수점 수치 가 가 져 온 영향 이다.
lua 5. 2 에서 비트 라 이브 러 리 를 통 해 비트 연산 을 제공 하여 이러한 영향 을 수정 합 니 다. lua 의 사전 정의 작업 이 아 닙 니 다.이러한 인터페이스 디자인 은 lua 에서 비트 연산 을 실현 하 는 것 은 lua 의 number 를 직접 대상 으로 하 는 것 이 아니 라 lua 의 number 에 대해 특수 한 조작 (비트 연산 에 대해 특수 한 해석 을 제공) 을 통 해 이 루어 진 것 임 을 나타 낸다.뿐만 아니 라 이런 조작 방식 도 다른 라 이브 러 리 를 사용 하여 비트 연산 에 대한 '해석' 을 지원 한다.
저 자 는 이 장 에서 16 진 데 이 터 를 예제 데이터 로 설명 하고 MAX 를 사용 하여 0xFFFFFF 를 대표 하 며 보조 함 수 를 사용 합 니 다.
function prints(x)
     print(string.format("0x%X",x))
end

주로 16 메커니즘 의 수 치 를 인쇄 하 는 데 쓰 인 다.
Lua 5.2 버 전의 비트 라 이브 러 리 이름 은 bit 32 로 32 자리 에서 실행 되 고 있 음 을 나타 낸다.비트 연산 의 비트 와 비트, 비트 또는 반 대 는 각각 band, bor, bnot 이 고 이 위 또는 bxor 입 니 다.
lua 의 비트 연산 은 부호 가 없 는 정수 입 니 다. 이 연산 자 들 은 파 라 메 터 를 0 - MAX 간 의 정수 로 바 꿉 니 다. 이 경 계 를 초과 한 값 은 먼저 모드 연산 을 수행 합 니 다. 만약 n 이 경 계 를 초과 하면 n% 2 ^ 32 를 실행 합 니 다. 일반적인 상황 에서 모든 비트 연산 결과 도 이 범위 안에 있 습 니 다.또한 주의해 야 할 것 은 서로 다른 플랫폼 이나 외부 라 이브 러 리 의 차이 로 인해 연산 결 과 는 서로 다른 수치 유형 일 수 있다 는 것 이다.하나의 기 교 는 비교 연산 을 할 때 lua 의 비트 라 이브 러 리 로 상수 를 정의 하 는 것 입 니 다.
e.g.
if bit32.or(a,b) == bit32.or(-1) then

Lua 의 변위 연산: 왼쪽 이동 (lshift), 오른쪽 이동 (rshift) (산술 이동 arithmetic shift), 왼쪽 회전 (lrotate), 오른쪽 회전 (rrotate). 왼쪽 이동 산술 이동 을 제외 한 나머지 변위 작업 은 빈 자 리 를 0 으로 보충 합 니 다. 왼쪽 이동 산술 이동 빈 자 리 를 보충 하 는 값 은 이 수의 마지막 자리 (기호) 를 복사 하 는 것 입 니 다.
lua 의 비트 연산 에서 변위 (회전) 값 이 마이너스 라면 lua 는 반대 동작 을 수행 합 니 다.2 에 대해 왼쪽으로 이동 - 1 을 실행 하면 2 를 오른쪽으로 1 개 단 위 를 이동 하 는 것 과 같 습 니 다.
e.g.
print(bit32.lshift(2,-1))          --1
print(bit32.rshift(2,1))           --1

bit 32. btest 연산 기능 은 band 와 유사 하지만 반환 값 은 boolean 형 으로 결과 와 0 을 비교 합 니 다.결 과 는 1 반환 값 이 true 이 고 결 과 는 0 반환 값 은 false 입 니 다.
bit 32. extract 연산, 추출 함수.그 연산 은 실제로 마스크 와 결합 하여 변위 연산 을 실행 했다.예 를 들 어 bit 32. extract (x, f, w), 이 연산 이 되 돌아 온 결 과 는 x 의 f 자리 에서 w 자리 수 를 시작 합 니 다.(returns w bits from x, starting at bit f) 네티즌 들 의 설명 을 받 아 x 에서 f 비트 에서 f + w - 1 비트 의 값 을 추출 하여 구 성 된 정수.
ps. 나중에 다시 한 번 이해 하면 잘 모 르 겠 습 니 다. 여기 서 추출 한 자릿수 는 f 비트 에서 시 작 됩 니 다. 만약 에 실행 하면 bit 32. extract (11, 1, 3), 연산 과정 은 11 의 2 진법 이 나타 내 는 1011 첫 번 째 부터 (정수 부분의 맨 오른쪽 은 0 위 를 가리 키 는 것) 자신 을 포함 하 는 3 자리, 즉 101 로 구 성 된 정수 까지 5 입 니 다.
한편, extract 연산 의 반 연산 은 replace 로 한 수의 일부 비트 에 대해 교체 작업 을 수행 합 니 다.이 연산 은 4 개의 매개 변수 가 있 습 니 다. 첫 번 째 매개 변 수 는 우리 가 연산 을 실행 해 야 하 는 수 를 말 합 니 다.두 번 째 매개 변 수 는 교체 할 수 를 가리킨다.후 두 매개 변 수 는 extract 의 후 두 매개 변수 와 뜻 이 일치 합 니 다. f 비트 부터 모두 w 비트, 즉 f 에서 f + w - 1 비트 입 니 다.
e.g.
print(bit32.replace(11,6,1,3))          --13

아래 의 연산 결과 에 주의 하 시 오
print(bit32.replace(11,bit32.extract(11,1,3),1,3))          --11

다음으로 전송:https://www.cnblogs.com/zhong-dev/p/4044570.html

좋은 웹페이지 즐겨찾기