Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java로 구현하는 정수의 실제 비트 반전 방법

음수가 아닌 정수 n이 주어졌을 때, n의 비트를 뒤집어 그 결과값을 출력하는 것이 목표입니다. 비트를 반전할 때는 정수의 실제 이진 표현을 그대로 사용하며, 앞자리의 선행 0(leading zero)은 고려하지 않습니다.

입출력 시나리오 살펴보기

입력 − 13

출력 − Reverse actual bits of the given number 11

(13)10 = (1101)2.
비트를 뒤집으면:
(1011)2 = (11)10.

설명 − 입력받은 숫자로부터 이진 비트를 추출한 뒤, 이를 역순으로 뒤집고 최종적으로 십진수 형태로 변환하여 결과로 반환합니다.

입력 − 18

출력 − Reverse actual bits of the given number 9

(18)10 = (10010)2.
비트를 뒤집으면:
(1001)2 = (9)10.

설명 − 마찬가지로 입력 숫자의 이진 비트를 구한 후 뒤집어서, 다시 십진수 값으로 변환해 출력합니다.

프로그램에서 사용된 접근 방식

  • main 메서드 내부

    • 숫자를 입력받아 reverseBinaryBits(int input) 메서드에 전달합니다.

  • reverseBinaryBits(int input) 메서드 내부

    • 뒤집힌 비트를 저장하기 위한 변수 rev_input을 0으로 초기화합니다.

    • 종료 조건(input > 0)을 가진 루프를 반복하며 오른쪽 비트부터 차례대로 순회합니다.

      • 비트 단위 오른쪽 시프트(>>) 연산을 사용해 n의 이진 표현에서 비트를 하나씩 추출하고, 비트 단위 왼쪽 시프트(<<) 연산을 통해 rev_input에 순서대로 누적합니다.

예제 코드

class TutorialsPoint{
    public static int reverseBinaryBits(int input){
        int rev_input = 0;
        while (input > 0){
            rev_input <<= 1;
            if ((int) (input & 1) == 1){
                rev_input ^= 1;
            }
            input >>= 1;
        }
        return rev_input;
    }
    public static void main(String[] args){
        int input = 13;
        System.out.println("Reverse actual bits of the given number");
        System.out.println(reverseBinaryBits(input));
    }
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Reverse actual bits of the given number
11

이 알고리즘은 입력 숫자의 가장 낮은 자리 비트(LSB)부터 한 비트씩 확인하면서, 결과 변수를 왼쪽으로 시프트한 뒤 해당 비트를 더해가는 방식으로 동작합니다. 따라서 별도의 문자열 변환 없이도 순수한 비트 연산만으로 효율적으로 비트 반전을 수행할 수 있습니다.