16 진수 또는 8 진수로 정수 상수를 정의하는 방법과 유사하게 이진수로 할 수 있습니까?
나는 이것이 정말 쉽고 어리석은 질문임을 인정합니다. 내 Google 검색이 비어 있습니다.
16 진수 또는 8 진수로 정수 상수를 정의하는 방법과 유사하게 이진수로 할 수 있습니까?
나는 이것이 정말 쉽고 어리석은 질문임을 인정합니다. 내 Google 검색이 비어 있습니다.
답변:
따라서 Java SE 7이 출시되면서 바이너리 표기법이 기본적으로 제공됩니다. 바이너리에 대한 적절한 이해가 있다면 구문은 매우 간단하고 분명합니다.
byte fourTimesThree = 0b1100;
byte data = 0b0000110011;
short number = 0b111111111111111;
int overflow = 0b10101010101010101010101010101011;
long bow = 0b101010101010101010101010101010111L;
특히 클래스 수준 변수를 바이너리로 선언 할 때 바이너리 표기법을 사용하여 정적 변수를 초기화하는 데 전혀 문제가 없습니다.
public static final int thingy = 0b0101;
너무 많은 데이터로 숫자를 넘치지 않도록주의하십시오. 그렇지 않으면 컴파일러 오류가 발생합니다.
byte data = 0b1100110011; // Type mismatch: cannot convert from int to byte
이제 정말 멋지고 싶다면 숫자 리터럴로 알려진 Java 7의 다른 깔끔한 새 기능을 밑줄과 결합 할 수 있습니다. 리터럴 밑줄이있는 이진 표기법의 다음 멋진 예를 살펴보십시오.
int overflow = 0b1010_1010_1010_1010_1010_1010_1010_1011;
long bow = 0b1__01010101__01010101__01010101__01010111L;
가독성은 물론이고 멋지고 깔끔하지 않나요?
나는 TheServerSide에서 주제에 대해 작성한 작은 기사에서 이러한 코드 조각을 가져 왔습니다. 자세한 내용은 자유롭게 확인하십시오.
Java 7 :
int i = 0b10101010;
이전 버전의 Java에는 이진 리터럴이 없습니다 (대안은 다른 답변 참조).
_
시퀀스를 더 읽기 쉽게 만드는 문자가 있을 수 있음을 지적하고 싶습니다 . int i = 0b1010_1010_0011;
Java에는 바이너리 리터럴이 없지만이 작업을 수행 할 수 있다고 가정합니다 (요점은 모르겠지만).
int a = Integer.parseInt("10101010", 2);
Ed Swangren의 답변
public final static long mask12 =
Long.parseLong("00000000000000000000100000000000", 2);
잘 작동합니다. long
대신 사용 int
하고 수정자를 추가하여 비트 마스크로 가능한 사용을 명확히했습니다. 하지만이 접근 방식에는 두 가지 불편 함이 있습니다.
대안 적 접근을 제안 할 수 있습니다
public final static long mask12 = 1L << 12;
이 표현은 12 번째 비트가 1이라는 것을 분명하게합니다 (카운트는 0부터 시작하여 오른쪽에서 왼쪽으로). 마우스 커서를 가리키면 툴팁이
long YourClassName.mask12 = 4096 [0x1000]
Eclipse에 나타납니다. 다음과 같이 더 복잡한 상수를 정의 할 수 있습니다.
public final static long maskForSomething = mask12 | mask3 | mask0;
또는 명시 적으로
public final static long maskForSomething = (1L<<12)|(1L<<3)|(1L<<0);
변수의 값은 maskForSomething
개발시 Eclipse에서 계속 사용할 수 있습니다.
상수 선언 :
public static final int FLAG_A = 1 << 0;
public static final int FLAG_B = 1 << 1;
public static final int FLAG_C = 1 << 2;
public static final int FLAG_D = 1 << 3;
그리고 그들을 사용
if( (value & ( FLAG_B | FLAG_D )) != 0){
// value has set FLAG_B and FLAG_D
}
Google에서 "Java literals syntax"를 검색하면 몇 가지 항목이 나타납니다.
8 진수 구문 (번호 접두사 0), 10 진수 구문 및 "0x"접두사가있는 16 진수 구문이 있습니다. 그러나 이진 표기법에 대한 구문은 없습니다.
몇 가지 예 :
int i = 0xcafe ; // hexadecimal case
int j = 045 ; // octal case
int l = 42 ; // decimal case
byte b = 0b01000001
(더 나은 가독성을 위해 byte b = 0b0100_0001
).