JAVA 에서 ^, &, | 비트 연산 자의 의미 에 대한 상세 한 설명

1. ^ (이 또는 연산 자)
^ 이 진 을 위 한 두 개의 연산 자 입 니 다.연산 규칙: 두 바 이 너 리 수치 가 같은 자리 에서 같 으 면 결과 에서 이 자 리 는 0 이 고 그렇지 않 으 면 1 이다. 예 를 들 어 1011 & 0010 = 1001 이다.
2. | (또는 연산 자)
| 이 진 을 위 한 두 개의 연산 자 입 니 다.연산 규칙: 두 개의 바 이 너 리 수 치 는 같은 자리 에 적어도 1 이 있 으 면 결과 에서 이 자 리 는 1 이 고 그렇지 않 으 면 0 이다. 예 를 들 어 1011 & 0010 = 1011 이다.
3. & (연산 자 와)
& 2 진 을 위 한 2 개의 연산 자 입 니 다.주의해 야 할 것 은 & & 자바 에서 판단 조건 간 에 '화' 를 나타 내 는 식별 자 입 니 다. & 두 개의 연산 자 입 니 다. 두 개의 바 이 너 리 수치 가 같은 자리 에 있 으 면 그 결 과 는 1 입 니 다. 그렇지 않 으 면 0 입 니 다. 두 개 모두 트 루 (1) 라 고 볼 수 있 습 니 다. 결과 도 트 루 (1) 입 니 다. 예 를 들 어 1011 & 0110 = 0010 입 니 다.
& 또 하나의 중요 한 점 은 면접 에서 자주 발생 하 는 문제 입 니 다. 즉, 이 연산 자 는 여 수 를 계산 할 수 있 습 니 다.우 리 는 네 가지 연산 에서 속도 가 가장 느 린 것 은 나 누 는 것 이 고 나머지 조작 이 더욱 느 린 것 을 알 고 있 기 때문에 & 를 통 해 두 수의 여 수 를 신속하게 구 할 수 있다. 예 를 들 어 예 를 들 어 볼 수 있다.
public ModTest{
    public static void main(String[] args){
        System.out.println(45 & 11);
        System.out.println(45 & 7);
    }
    /**result:3, 5*/
}

x, y 두 개의 수 치 를 정 하고 x 와 y 의 여 수 를 구 하려 면 x & (y - 1) 만 있 으 면 됩 니 다. 위의 예 에서 보 듯 이 45 와 12 (45 와 8) 의 여 수 를 구 하려 면 45 & 11 (45 & 7) 만 요구 합 니 다.
아래 세 가지 연산 자 는 모두 비트 연산 자 이다.
> > x (상수): x 비트 를 오른쪽으로 이동 합 니 다.
< (정점 이 어느 방향 에서 어느 방향 으로 이동 하 든) 양수 저 위 (맨 오른쪽) 와 상 관 없 이 x 개 0 을 보충한다.
<<<:/>
> > > x (상수): 기호 없 이 x 위 를 오른쪽으로 이동 하 는 것 을 나타 낸다. 기호 없 는 것 은 > > x 와 비교 하 는 것 이다. 이 조작 은 이동 한 후에 양음 수 높 은 위치 (맨 왼쪽) 와 상 관 없 이 0 을 보충한다.
4. <
예시 1: - 20 < 2
원래 코드: 10000000 00000000 00010100
반전   11111111   11111111  11101011 (기호 위 치 는 변 하지 않 고 다른 위 치 는 반대)
추가 번호: 11111111   11111111   11111111  11101100 (리 코딩 + 1)
왼쪽으로 두 분 이동 (맨 오른쪽 두 분 0 추가)
추가 번호: 11111111   11111111   11111111  10110000
반전   11111111   11111111  10101111 (패 치 - 1)
원본 코드: 10000000 00000000 00000000 01010000 (기호 위 치 는 변 하지 않 고 다른 위 치 는 반대)
결과: - 80
예시 2: 20 < 2
원본 코드 (리 코딩, 패 치): 000000000 00000000 00010100
왼쪽으로 두 분 이동 (맨 오른쪽 두 분 0 추가)
원본 코드 (리 코딩, 패 치): 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
결과: 80
5. > > (오른쪽 연산 자)
예 1: - 20 > > 2
원래 코드: 10000000 00000000 00010100
반전   11111111   11111111  11101011 (기호 위 치 는 변 하지 않 고 다른 위 치 는 반대)
추가 번호: 11111111   11111111   11111111  11101100 (리 코딩 + 1)
오른쪽으로 두 분 이동 (맨 왼쪽 두 분 1 추가)
추가 번호: 11111111   11111111   11111111  11111011
반전   11111111   11111111  11111010 (패 치 - 1)
원본 코드: 10000000 00000000 00000000 0000001 (기호 위 치 는 변 하지 않 고 다른 위 치 는 반대)
결과: - 5
예 2: 20 > > 2
원본 코드 (리 코딩, 패 치): 000000000 00000000 00010100
오른쪽으로 두 분 이동 (맨 왼쪽 두 분 0 추가)
원본 코드 (리 코딩, 패 치): 000000000 00000000 0000001
결과: 5
6. > > (기호 없 이 오른쪽 연산 자)
예 1: - 2 > > 1
원래 코드: 10000000 00000000 00000000 00000000 00000010
반전  11111111   11111111  11111101 (기호 위 치 는 변 하지 않 고 다른 위 치 는 반대)
추가 번호: 11111111  11111111   11111111  11111110 (리 코딩 + 1)
오른쪽으로 1 자리 이동 (기호 비트 연산 자 없 음, 맨 왼쪽 한 자리 0 만 추가)
추가 번호: 011111111  11111111   11111111  11111111
반전  11111111   11111111  11111111 (고 위 는 0, 정수)
원본 번호: 011111111  11111111   11111111  11111111 (반전 과 동일)
결과: 2147483647
예 2: 2 > > 1
원래 코드 (리 코딩, 리 코딩)
오른쪽으로 한 명 이동 (맨 왼쪽 한 명 추가 0)
원본 코드 (리 코딩, 패 치): 000000000000000000000000000000000000000001
결과: 1
7. 추가 지식
^ =, | =, & =, < =, > =, > > = = 등 호 를 추가 하지 않 는 것 과 차이 가 많 지 않 고 할당 작업 만 추 가 했 습 니 다. > = 을 예 로 들 면:
public class Test {
	public static void main(String[] args) {
		int num = 2;
		System.out.println(num>>=1);
        System.out.println(num);
	}
    /**result:1  1

}

주의: 할당 작업 이 있 는 이상 연산 자 왼쪽 은 상수 가 될 수 없습니다. 예 를 들 어 2 > > = 1 은 잘못 보 고 됩 니 다.
계산 중 에 데 이 터 를 저장 하 는 것 은 코드 를 보충 하 는 형식 이다.
 
참고 문헌:
https://www.cnblogs.com/liaopeng/p/8436155.html
http://www.cnblogs.com/chuijingjing/p/9405598.html
https://blog.csdn.net/tianyeshiye/article/details/80261622

좋은 웹페이지 즐겨찾기