Java의 비트 연산 및 응용 시나리오 소개
우리는 프로그램의 모든 숫자가 컴퓨터 메모리에 이진 형식으로 저장되고, 비트 연산은 메모리에 있는 정수의 이진 비트에 직접 연산된다는 것을 알고 있습니다. 예를 들어 and 연산은 원래 논리 연산자이지만 AND 연산은 정수 사이에서도 수행될 수 있습니다.
비트 연산에는 주로 교대 연산과 논리 연산이 포함됩니다. 다음으로 시프트 연산과 논리 연산에 대해 각각 이야기하겠습니다.
Shift 연산:
왼쪽 Shift: 연산자는 <<, 왼쪽으로 이동, 오른쪽의 낮은 비트에 0을 추가, 왼쪽의 높은 비트 삭제, 이진수를 정수로 처리, 1비트 이동 왼쪽은 2를 곱한 것과 같습니다. 부호 없는 오른쪽 시프트: 연산자는 >>>이며 오른쪽으로 이동하고 오른쪽을 버리고 왼쪽에 0을 추가합니다. 부호 있는 오른쪽 시프트: 연산자는 >>이며 오른쪽으로 이동하여 오른쪽에 추가된 값은 원래의 최상위 비트에 따라 달라집니다. 원래 1이면 1을 추가하고 0이면 입니다. , 0을 더합니다. 이진수를 정수의 경우 오른쪽으로 1비트 이동하는 것은 2로 나누는 것과 같습니다.
예:
int a = 4; // 100 a = a >> 2; // 001,等于1 a = a << 3 // 1000,变为8
논리 연산에는 다음이 포함됩니다.
Bitwise AND &: 두 비트가 모두 1인 경우에만 1
Bitwise OR|: 한 비트가 1인 한 1
-
비트 부정~: 1은 0이 되고, 0은 1이 됩니다
비트 XOR^: 다른 것은 참이고, 같은 것은 거짓입니다
예:
int a = ...; a = a & 0x1 // 返回0或1,就是a最右边一位的值。 a = a | 0x1 //不管a原来最右边一位是什么,都将设为1
몇 가지 간단한 응용 프로그램을 살펴보겠습니다. 시나리오:
시나리오 1 : 홀수와 짝수 결정
분석: 홀수는 2의 정수배가 아닙니다. 이진수로 변환한 후 가장 낮은 비트는 1이 되어야 하며, 짝수의 경우 그 반대가 됩니다. 이 기능을 사용하면 비트 연산을 통해 정수의 패리티를 쉽게 결정할 수 있습니다.
코드 보기:
int i = 1;// 二进制存储方式为00000000000000000000000000000001 int j = 5;// 二进制存储方式为00000000000000000000000000000101 int k = 6;// 二进制存储方式为00000000000000000000000000000110 if ((i & j) == 1) { System.out.println("j的最低位为1,为奇数"); } if ((i & k) == 0) { System.out.println("k的最低位为0,为偶数"); }
시나리오 2: 양의 정수가 2의 정수 거듭제곱인지 확인
분석: 먼저 2의 공통 정수 거듭제곱을 살펴보겠습니다: 2, 4, 8, 16, 변환 이진법 숫자는 10, 100, 1000, 10000입니다. 패턴을 찾았나요? 즉, 첫 번째 비트가 1인 것을 제외하면 나머지 비트는 모두 0이다. 이 숫자에서 1을 빼면 비트 단위 반전의 결과가 동일해집니다. 예를 들어 이진수 111인 8-1=7은 이진수 1000을 8로 반전하여 얻을 수 있습니다. 그리고 8&7=0, 규칙을 추출하면 다음과 같습니다:
(n&(n-1))==0
이 규칙을 따르는 n은 2의 정수 거듭제곱입니다.
(비디오 공유 학습: java 비디오 튜토리얼)
시나리오 3: 간단한 컬렉션 처리
말도 안 돼요. 코드를 보세요.
public class SimpleSet { public static final int A = 0x01;// 最后四位为0001 public static final int B = 0x02;// 最后四位为0010 public static final int C = 0x04;// 最后四位为0100 public static final int D = 0x08;// 最后四位为1000 private int set = 0x00;// 初始0000,空集合 public void add(int i) {// 将i对应位的值置为1,重复add不影响。默认传入值为ABCD之一,此处省去边界判断 set |= i; } public boolean contain(int i) {// 判断相应位置是否为1 return (set & i) == i; } public boolean remove(int i) {// 来不及不解释了快看代码 if (contain(i)) { set -= i; return true; } else { return false; } } }
테스트해 보세요:
public static void main(String[] args) { SimpleSet set = new SimpleSet(); System.out.println(set.contain(A)); set.add(B); System.out.println(set.contain(A)); System.out.println(set.contain(B)); set.add(A); set.add(C); System.out.println(set.contain(A)); set.remove(A); System.out.println(set.contain(A)); System.out.println(set.remove(A)); System.out.println(set.contain(C)); }
출력은 다음과 같습니다.
false false true true false false true
좋아, 질문 없습니다.
위 샘플 코드의 A, B, C, D가 열거와 다소 유사하다고 생각할 수도 있습니다. 실제로 열거를 위한 jdk 소스 코드의 컬렉션 클래스 EnumSet은 유사한 솔루션을 사용하지만 이는 물론 더 복잡합니다. 이 외에도 더 많은 것들이 있습니다. 관심이 있으시면 소스 코드를 확인해 보세요. 이 솔루션에는 비트 벡터라는 이름이 있습니다.
그나저나 Java의 int 패키징 클래스인 Integer에는 비트 연산을 제공하는 정적 도구가 많이 있으며, 그 중 대부분은 매우 복잡합니다. 관심이 있다면 확인해 보세요
결론:
비트 연산은 컴퓨터가 가장 잘하는 연산으로, jdk의 소스 코드에서도 광범위하게 사용됩니다. 이를 이해하면 컴퓨터를 더 깊이 이해하는 데 도움이 되고, 더 우아한 코드를 작성하는 데도 도움이 됩니다.
관련 권장 사항: Java 입문 튜토리얼
위 내용은 Java의 비트 연산 및 응용 시나리오 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4

Spring Boot는 강력하고 확장 가능하며 생산 가능한 Java 응용 프로그램의 생성을 단순화하여 Java 개발에 혁명을 일으킨다. Spring Ecosystem에 내재 된 "구성에 대한 협약"접근 방식은 수동 설정, Allo를 최소화합니다.
