자바 비트연산 예제

Posted on

또 다른 예는 비트 연산자 및 제로 테스트를 사용하여 두 정수 a와 b의 합계를 계산하는 방법을 보여주는 추가의 의사 코드 구현입니다: 비트 별로 NOT, 또는 보완, 각 비트에 논리적 부정을 수행하는 unary 작업입니다, 형성 주어진 이진 값의 보완. 0인 비트는 1이 되고 1인 비트는 0이 됩니다. 예: 물론 예입니다. Java 바이트 코드는 32비트 또는 64비트 시스템과 독립적입니다. 컴파일 된 자바 코드가 “모든”시스템에서 실행되어야한다고하는 이유입니다. 가상 시스템은 패키지된 번들에 있는 일부 네이티브 파일로 인해 특수 시스템 아키텍처를 위해 컴파일되며 네이티브 파일은 플랫폼에 독립되지 않습니다. 이진 리터럴은 헥사데피나 옥탈에 있는 것보다 데이터 간의 관계를 더 분명하게 만들 수 있습니다. 예를 들어 다음 배열의 각 연속 된 숫자는 한 비트씩 회전됩니다: 언어의 C-패밀리에는 회전 연산자가 없지만 shift 연산자에서 합성할 수 있습니다. 보안 요구 사항이 있는 소프트웨어에서 정의되지 않은 동작 및 타이밍 공격을 방지하기 위해 명령문이 잘 형성되었는지 확인하려면 주의해야 합니다. [6] 예를 들어, 32비트 부호없는 값 x 를 n 위치로 회전하는 순진한 구현은 간단합니다: 캐리를 통해 단일 회전은 사전에 캐리 플래그를 설정하여 한 위치의 논리적 또는 산술 적 시프트를 시뮬레이션할 수 있습니다.

예를 들어 캐리 플래그에 0이 포함된 경우 x Right-ROTATE-THROUGH-CARRY-BY-ONE은 논리적 오른쪽 시프트이고 캐리 플래그에 부호 비트의 복사본이 포함된 경우 x 오른쪽 회전-회전-THROUGH-CARRY-BY-ONE은 산술 오른쪽 시프트입니다. 이러한 이유로 로우 엔드 PIC와 같은 일부 마이크로 컨트롤러는 캐리를 통해 회전하고 회전하며 산술 또는 논리적 시프트 지침을 귀찮게하지 않습니다. 컴퓨터에는 산술 및 논리 연산을 수행하기 위한 효율적인 기본 제공 지침이 있는 경우가 많지만 비트별 연산자와 제로 테스트를 다양한 방식으로 결합하여 이러한 모든 작업을 수행할 수 있습니다. [13] 예를 들어, 여기에 두 개의 임의 정수 a와 b (b보다 큰)를 곱하는 방법을 보여주는 고대 이집트 곱셈의 의사 코드 구현은 비트 시프트 및 추가만 사용하여 : 이 속성으로 인해, 의 패리티를 확인하기 쉬워진다. 가장 낮은 값 비트의 값을 확인 하여 이진 번호입니다. 위의 예제 사용: 이러한 예제에서는 명확하지 않을 수도 있지만(x-1)의 이진 표현은 모든 비트를 x에서 가장 오른쪽 1의 오른쪽으로 넘기고 오른쪽 1을 포함하면 얻을 수 있습니다. 비트와 AND는 두 개의 동일한 길이 의 이진 표현을 취하고 해당 비트의 각 쌍에 대한 논리AND 연산을 수행하는 이진 연산으로, 이는 이를 곱하는 것과 같습니다. 따라서, 비교된 위치에 있는 두 비트가 모두 1인 경우, 생성된 이진 표현의 비트는 1(1 × 1 = 1); 그렇지 않으면 결과는 0입니다(1 × 0 = 0 및 0 × 0 = 0). 예를 들어, 서명되지 않은 정수의 경우 숫자의 비트별 보완은 서명되지 않은 정수 범위의 중간 지점에서 숫자의 “미러 반사”입니다. 예를 들어, 8비트 서명되지 않은 정수의 경우 NOT x = 255 – x는 그래프에서 0에서 255까지의 증가 범위를 255에서 0으로 줄이는 범위를 효과적으로 “뒤집는” 하향 선으로 시각화할 수 있습니다.

간단하지만 예시적인 사용 예는 각 픽셀이 부호 없는 정수로 저장되는 그레이스케일 이미지를 반전시키는 것입니다.