>Java >java지도 시간 >Java 비트 연산 소개(코드 예)

Java 비트 연산 소개(코드 예)

不言
不言앞으로
2019-03-07 17:38:162526검색

이 기사는 Java 비트 연산(코드 예제)에 대한 소개를 제공합니다. 이는 특정 참조 가치가 있으므로 도움이 될 수 있습니다.

우리 모두는 컴퓨터 세계에서는 프로그램이 아무리 복잡하고 아름답더라도 결국에는 0과 1로 변한다는 것을 알고 있습니다. 이것이 바로 우리가 흔히 바이너리라고 부르는 것입니다. 나는 모두가 바이너리에 익숙하다고 믿습니다. 현실 세계와 다른 점은 현실 세계에서는 일반적으로 십진수를 사용하여 표현한다는 것입니다. 즉, 10 대 1을 만나면 이러한 모든 것이 우리에게 친숙합니다. 이때 우리는 현실 세계의 십진수 측정 단위와 컴퓨터의 이진수 측정 단위가 다르다는 단서를 찾을 수 있습니다. 그렇다면 그들 사이를 변환하는 방법은 무엇입니까? 여기에는 상대적으로 기본적인 컴퓨터 지식이 포함됩니다. 이 글에서는 다루지 않았습니다. (관심이 있으시면 다음에 이야기해 보세요.) 자, 오늘의 주제로 돌아가서 비트 연산에 대해 이야기해 보겠습니다. 이것은 어떤 개념입니까? 우리는 어릴 때부터 현실 세계에서 십진법의 연산인 덧셈, 뺄셈, 곱셈, 나눗셈의 연산을 접해왔습니다. 오늘 우리가 이야기할 것은 바이너리 비트의 몇 가지 일반적인 연산입니다. 예: &(비트 AND), |(비트 OR), ^(배타적 OR), <<(왼쪽 시프트), >>(오른쪽 시프트) 등

참과 거짓
연산자를 사용하기 전에 참과 거짓에 대해 이야기해야 합니다. Java에서 우리는 참값이 참을 나타내고 거짓값이 거짓을 나타낸다는 것을 모두 알고 있습니다. 실제로 컴퓨터에서는 일반적으로 1이 참을 나타내고 0이 거짓을 나타냅니다. Json을 사용해 본 학생들은 Java의 부울 유형도 1을 사용하여 true로 역직렬화할 수 있고, 0을 false로 역직렬화할 수 있다는 것을 알아야 합니다.

& (비트 AND)
비트 AND에 대해 이야기하기 전에 먼저 친숙한 && 논리 AND 연산에 대해 이야기해 보겠습니다. 간단히 말하면 A&&B는 A와 B가 모두 참일 때 참이고, 그렇지 않으면 거짓이라는 의미입니다. 어떤 사람들은 이를 "일단 거짓은 거짓임에 틀림없다"고 부르기도 합니다.

이제 위치와를 살펴보겠습니다. 먼저 프로그램을 살펴보겠습니다.

@Test

public void testBit(){
    int a = 8;
    int b = 9;
    System.out.println("a binary: "+Integer.toBinaryString(a));
    System.out.println("b binary: "+Integer.toBinaryString(b));
    System.out.println("a & b binary: "+Integer.toBinaryString(a&b));
    System.out.println("a & b result: "+(a&b));
}

설명을 보기 전에 결과가 무엇인지 추측해 볼까요?

코드 설명:

bit AND: 문자 그대로 이해하면 이진 비트의 AND 연산이기도 합니다.

숫자 8의 십진수 형식은 1000입니다.

숫자 9의 십진수 형식은 1001입니다.

다시 위치 연산을 수행해 보겠습니다.

는 다음과 같습니다.

8:1000
9:1001
&
8 1000

가장 왼쪽 1&1 = 1, 가운데 0&0 = 0, 가장 오른쪽 0&1 = 0입니다.

이진수 결과는 1000이며, 십진수로 변환하면 8이 됩니다.

프로그램 실행 결과는 다음과 같습니다.

a 바이너리: 1000
b 바이너리: 1001
a & b 바이너리: 1000
a & b 결과: 8

결과는 기대에 부합합니다.

|(비트 OR)

&(비트 AND) 연산이 위에서 언급되었습니다. 이제 비트 OR 연산을 살펴보고 위의 예를 계속 사용해 보겠습니다. 아래와 같이

@Test

public void testBit(){
    int a = 8;
    int b = 9;
    System.out.println("a binary: "+Integer.toBinaryString(a));
    System.out.println("b binary: "+Integer.toBinaryString(b));
    System.out.println("a & b binary: "+Integer.toBinaryString(a|b));
    System.out.println("a & b result: "+(a|b));
}

이진수를 다시 살펴보세요.

8: 1000
9: 1001
|
9 1001
가장 왼쪽의 1|1 = 1, 가운데의 0|0 = 0, 가장 오른쪽의 0|1 = 1입니다.

바이너리 결과는 1001이고 해당 십진수는 9입니다.

연산 결과는 다음과 같습니다.

a 바이너리: 1000
b 바이너리: 1001
a & b 바이너리: 1001
a & b 결과: 9

^ (XOR)

이 연산자가 더 흥미롭습니다. 차이점은 다음과 같습니다. 문자 그대로의 의미는 다릅니다. 배치 작업도 마찬가지입니다. 위의 예를 계속 사용하세요.

@Test

public void testBit(){
    int a = 8;
    int b = 9;
    System.out.println("a binary: "+Integer.toBinaryString(a));
    System.out.println("b binary: "+Integer.toBinaryString(b));
    System.out.println("a & b binary: "+Integer.toBinaryString(a^b));
    System.out.println("a & b result: "+(a^b));
}

계속해서 바이너리를 살펴보세요.

8:1000
9:1001
^
1 0001

비트가 동일하면 false가 되고, 그것들은 다릅니다. 그것은 사실일 것입니다. 왼쪽의 1=1은 false와 동일하며 0입니다. 가운데 0=0도 거짓이고 0이다. 가장 오른쪽의 0은 1과 같지 않습니다. 이는 참입니다. 결과는 1입니다.

<<(왼쪽으로 Shift)

실생활에서는 곱셈을 자주 사용합니다. <<는 낮은 비트가 0으로 채워지는 이진법의 변위 ​​연산을 의미합니다. 예: 8<<1.

@Test

public void testCode(){
    int a =8;
    System.out.println("a toBinaryString: "+Integer.toBinaryString(a));
    System.out.println("a<<1 toBinaryString: "+Integer.toBinaryString(a<<1));
    System.out.println("result: "+(a<<1));

바이너리는 다음과 같습니다.

8 1000
8<<1
16 10000

결과는 2^4 = 16입니다. << 왼쪽의 a는 베이스를 나타내고, 오른쪽의 1은 이동해야 하는 비트 수를 나타냅니다. 화살표가 가리키는 방향이 어디든 변위가 발생하는 곳입니다. 프로그램 실행 결과:

a toBiryString: 1000
a<<1 toBinaryString: 10000
result: 16

>> 오른쪽 시프트

(오른쪽 시프트) 및 왼쪽 시프트 << 높은 비트는 0으로 채워집니다. 위의 예를 계속하면:

@Test

public void testCode(){
    int a =8;
    System.out.println("a toBinaryString: "+Integer.toBinaryString(a));
    System.out.println("1>>a toBinaryString: "+Integer.toBinaryString(a>>1));
    System.out.println("result: "+(a>>1)
}

Binary:

8 : 1000
8>>1
4 : 0100

실행 결과:

a toBinaryString: 1000
a>>1 to B inaryString : 100
결과: 4

사실 기억하기 더 쉬운 공식이 있습니다:

a>>n은 a / (2^n) 거듭제곱을 의미합니다. (반올림)

a<

이제 간단한 계산을 해보겠습니다.

a = 13일 때 n = 2입니다. 13

(위의 빠른 알고리즘에 오류가 있으면 뺨때려주세요!!!)


비트 시프트 연산은 소스 코드와 일반 알고리즘에서 매우 일반적입니다. 또한 Java 프로그래머가 비트 연산을 마스터하는 것도 필요합니다. 이는 우리의 알고리즘과 소스 코드를 이해하는 데 매우 도움이 됩니다!


위 내용은 Java 비트 연산 소개(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제