Java 바이너리 작업(동력 노드 Java 학원 정리)

4104 단어 java2진
자리를 옮기다
비트 연산에서 대부분의 작업은 왼쪽으로 이동하고 오른쪽으로 이동한다.Java에서는 다음과 같은 두 개의 연산자를 <>에 대응합니다.

/* 00000001 << 1 = 00000010 */
1 << 1 == 2 
/* 00000001 << 3 = 00001000 */
1 << 3 == 8
/* 11111111 11111111 11111111 11110000 >> 4 = 11111111 11111111 11111111 11111111 */
0xFFFFFFF0 >> 4 == 0xFFFFFFFF 
/* 00001111 11111111 11111111 11111111 >> 4 = 00000000 11111111 11111111 11111111 */
0x0FFFFFFF >> 4 == 0x00FFFFFF
주의: 오른쪽으로 이동하는 것은 기호 조작부호가 있습니다.많은 언어와 마찬가지로 자바는 최고위를 사용하여 수치의 양과 음, 음수의 최고위는 영원히 1을 나타낸다.1로 시작하는 바이너리 수는 1로 시작하고, 0으로 시작하는 바이너리 트리는 0으로 시작합니다.따라서 조심해야 한다. 자바는 정수에서 비트 연산을 할 수 있다.
'기호 없는 오른쪽 이동'연산자라는 세 번째 조작부호를 사용할 수 있습니다. >> 을 사용해서'0'으로 채워진 이동을 할 수 있습니다. 이 이동은 기호 위치를 무시하고 항상'0'으로 채워집니다.

/* 10000000 00000000 00000000 00000000 >>> 1 = 01000000 00000000 00000000 00000000 */
0x80000000 >>> 1 == 0x40000000
/* 10000000 00000000 00000000 00000000 >> 1 = 11000000 00000000 00000000 00000000 */
0x80000000 >> 1 == 0xC0000000
가장 큰 용도 중 하나는 신속하게 2의 멱을 구하는 것이다.1 왼쪽으로 이동 1위는 2, 이동 2위는 4, 이동 3위는 8...비슷하다. 오른쪽으로 이동 1위는 이 수를 2로 나누는 것과 같다.
또 다른 용도는 마스크를 만드는 것이다.비트 마스크는 2진수의 일부 지정된 비트를 차단하거나 수정하는 데 사용할 수 있으며, 다음 부분에서는 상세한 설명을 할 것입니다.하면, 만약, 만약...
0000000의 마스크, 코드는 매우 간단합니다.

int bitmask = 1 << 3;
비트 연산 조작부호를 사용하여 더 복잡한 마스크를 만들 수 있으며, 다음 부분에서도 비트 연산 조작부호를 설명할 수 있습니다.
비트 연산 조작자
다음은 자바에서 흔히 볼 수 있는 네 개의 비트 조작부호입니다.
  • ~C 위치별로 거꾸로 취한다
  • &C 순서대로
  • ~C 위치가 다르거나
  •  | C 순위 또는
  •  간단한 응용은 다음과 같다(간단하게 보면 2진법만 보여준다)
  • 
    1010 & 0101 == 0000
    1100 & 0110 == 0100
    1010 | 0101 == 1111
    1100 | 0110 == 1110
    ~1111 == 0000
    ~0011 == 1100
    1010 ^ 0101 == 1111
    1100 ^ 0110 == 1010
    예를 들어, 당신은'또는'연산을 통해 2진수에 지정된 비트'설정'을 1로 할 수 있으며, 다른 비트에 영향을 주지 않을 수 있다.
    
    10000001 | 00100000 = 10100001 /*  1 */
    10000001 | 1 << 5 = 10100001 /*   */
    00000000 | 1 << 2 | 1 << 5 = 00100100
    만약 당신이 선택적으로 어떤 위치를 0으로 설정하고 싶다면, 당신은 전체 1이지만 어떤 위치를 0으로 설정할 수 있습니다.
    
    01010101 & ~(1<<2) == 01010101 & 11111011 == 01010001
    비트 순서 정보
    가장 높은 자리가 왼쪽이라고 가정해 보세요.
    
    10010110
    ^   ^
    |   |-------   0  
    |
    |--------------   7  
    주의, 0위의 값은 2^0, 1위는 2^1,..., 7위의 값은 2^7이다.
    ParseInt 사용
    코드에서 2진 숫자를 조작하는 편리한 방법은 Integer를 사용하는 것입니다.parseInt () 메서드Integer.parseInt("101〃, 2)는 2진수 101을 10진수로 바꾸는 것을 의미한다(5). 이 방법을 이용하면 for순환에서 2진수를 사용할 수 있다는 뜻이다.
    
    /*  5 15  */
    for (int b = Integer.parseInt("0101",2); b <= Integer.parseInt("1111",2); b++) {
      /*   */
    }
    읽기 및 쓰기
    건의: 2진 비트(비트)를 흐름으로 변환하고 읽기와 쓰기에 사용할 클래스를 스스로 실현하고 자바의 입력과 출력 흐름을 사용하지 마십시오. 자바의 흐름은 바이트로만 조작할 수 있기 때문입니다.'다음 N비트를 주세요'와'바늘을 앞으로 M비트로 옮기세요'라는 기능이 매우 실용적이라고 생각할 것이다.예를 들어 가장 긴 호프만 인코딩의 길이를 확인하기 위해 충분한 데이터를 읽을 수 있다. 방금 읽은 호프만 인코딩의 실제 길이를 얻으면 바늘을 상응하는 길이로 옮길 수 있다.이런 종류는 비트 연산의 추악한 면을 눈에 익은 코드 블록으로 구분할 수 있다.
    유사하게, 만약 당신이 속도를 추구한다면, 의외로 시계 검색이 이렇게 강하다는 것을 발견할 수 있을 것이다.만약 호프만 인코딩이 0으로 시작하고 다른 인코딩 길이가 모두 3이고 1로 시작한다면, 이것은 8(2^3)개의 항목을 수용할 수 있는 표가 필요하다는 것을 의미한다. 당신의 표는 그럴 수 있다.
    
    char code[8];
    int codelen[8];
    code[0] = 'a'; codelen[0] = 1;
    code[1] = 'a'; codelen[1] = 1;
    code[2] = 'a'; codelen[2] = 1;
    code[3] = 'a'; codelen[3] = 1;
    code[4] = 'b'; codelen[4] = 3;
    code[5] = 'c'; codelen[5] = 3;
    code[6] = 'd'; codelen[6] = 3;
    code[7] = 'e'; codelen[7] = 3;
    두 번의 검색을 통해 찾으려는 문자를 찾을 수 있을 뿐만 아니라, 다음 문자가 앞에 얼마나 있는지 알 수 있다.이것은 모든 문자를 찾기 위해 여러 번 순환하는 것보다 훨씬 수지가 맞고 메모리도 절약할 수 있다.
    위에서 말한 것은 편집자가 여러분께 소개한 자바 2진 조작(동력 노드 자바 학원 정리)입니다. 여러분께 도움이 되었으면 합니다. 만약에 궁금한 것이 있으면 저에게 메시지를 남겨 주십시오. 편집자는 제때에 여러분에게 회답할 것입니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!

    좋은 웹페이지 즐겨찾기