비트 연산 자의 용도

3388 단어 비트 연산
개술
비트 연산 은 이 진수 에 대해 연산 하 는 것 이다.
자바 의 비트 연산 자 는 [&, |, ^, ~, <, >, >> >] 가 있 습 니 다. 그 중에서 [~] 는 1 원 연산 자 이 고 나머지 는 2 원 연산 자 이 며, 2 원 연산 자 는 해당 하 는 할당 연산 연산 연산 연산 연산 연산 연산 연산 자 [& =, | =, ^ =, > =, >> =, < =] 가 있 습 니 다.
자바 에서 비트 연산 의 조작 수 는 정형, 불 형, 문자 형 만 가능 합 니 다.점용 한 바이트 수 에 따라 작은 것 부터 큰 것 까지 각각 boolean, byte, char, short, int, long 이다.
 
 
용도.
 
용도 중 하나: 계산
연산 자 이 니 가장 중요 한 기능 은 당연히 연산 이다.비트 연산 자 를 사용 하여 연산 을 하면 우리 에 게 놀 라 운 편 의 를 가 져 다 줄 때 가 많다.
예 를 들 어 왼쪽으로 한 자 리 를 옮 기 는 것 은 2 로 나 누 는 것 과 같다.오른쪽으로 한 명 을 옮 기 는 것 은 나 누 기 2 에 해당 한다.
 
용도 2: flag
비트 연산 자 는 모두 이 진수 에 대해 연산 을 하기 때문에 우 리 는 이 점 을 이용 하여 다양한 상황 을 구분 하 는 flag 로 도 할 수 있다.
다음 코드 는 간단 한 예제 응용 이다.자바 파일 에 있어 서 다음 과 같은 몇 가지 modifier 가 있 습 니 다. [Public, package, proctected, private, static, abstract, final] 등등.이러한 modifier 중 일 부 는 동시에 존재 할 수 있 는 (예 를 들 어 Public 와 static) 이 고, 일 부 는 서로 배척 하 는 것 이다. 즉, 하나의 (예 를 들 어 Public 와 private) 만 나타 날 수 있다.
그러면 우 리 는 이러한 modifier 를 분류 할 수 있 습 니 다. 분류 하 는 방법 은 각각 바 이 너 리 를 차지 하 게 하 는 것 입 니 다.다음 코드 에서 Public 는 낮은 첫 번 째 바 이 너 리 를 차지 하고 private 는 낮은 네 번 째 바 이 너 리 를 차지 합 니 다.이러한 분류 방법 을 사용 하면 우 리 는 어떤 modifier 가 포함 되 어 있 는 지 여 부 를 쉽게 판단 할 수 있 고 일련의 modifier 가 포함 되 어 있 는 지 여 부 를 판단 할 수 있다.다음 코드 의 isPublic (int) 와 hasModifier (int) 와 같 습 니 다.
이러한 용법 은 권한 관리 시스템 에 도 사용 할 수 있다. 왜냐하면 권한 시스템 도 이런 유사 한 부분 을 동시에 가 질 수 있 고 일 부 는 반드시 서로 배척 하 는 수요 가 있어 야 하기 때문이다.
 
package bit;

public class ModifierBase {
    public static int PUBLIC = 0x0001;
    public static int PACKAGE = 0x0002;
    public static int PROTECTED = 0x0004;
    public static int PRIVATE = 0x0008;
    public static int STATIC = 0x0010;
    public static int ABSTRACT = 0x0020;
    public static int FINAL = 0x0040;
    
    private int modifier = 0;
    
    public ModifierBase(int modifier) {
        this.modifier = modifier;
    }
    
    public boolean isPublic() {
        return (this.modifier & PUBLIC) != 0;
    }
    
    public boolean isPackage() {
        return (this.modifier & PACKAGE) != 0;
    }
    
    public boolean isProtected() {
        return (this.modifier & PROTECTED) != 0;
    }
    
    public boolean isPrivate() {
        return (this.modifier & PRIVATE) != 0;
    }
    
    public boolean hasModifier(int modifier) {
        return (this.modifier & modifier) == modifier;
    }
    
    public boolean hasnotModifier(int modifier) {
        return (this.modifier & modifier) == 0;
    }
    
    public static void main(String[] args) {
        int modifiers1 = PUBLIC | PROTECTED;
        int modifiers2 = PUBLIC | PROTECTED | PRIVATE;
        ModifierBase base = new ModifierBase(modifiers2); // base is [PUBLIC | PROTECTED | PRIVATE]
        System.out.println(base.hasModifier(modifiers1)); // true because base includes [PUBLIC | PROTECTED]
        ModifierBase base2 = new ModifierBase(modifiers1); // base is [PUBLIC | PROTECTED]
        System.out.println(base2.hasModifier(modifiers2)); // fasle because base2 donot includes [PRIVATE]
    }
}

 원문 인용http://blog.csdn.net/superbeck/article/details/5387476
 

좋은 웹페이지 즐겨찾기