Java에서 이진 형식으로 정수 상수를 정의 할 수 있습니까?
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 및 이진 표기법 : OCP JP (Java Programmer) 시험 마스터 링
Java 7 :
int i = 0b10101010;
이전 버전의 Java에는 이진 리터럴이 없습니다 (대안은 다른 답변 참조).
Java에는 바이너리 리터럴이 없지만이 작업을 수행 할 수 있다고 가정합니다 (요점은 모르겠지만).
int a = Integer.parseInt("10101010", 2);
Ed Swangren의 답변
public final static long mask12 =
Long.parseLong("00000000000000000000100000000000", 2);
잘 작동합니다. long
대신 사용 int
하고 수정자를 추가하여 비트 마스크로 가능한 사용을 명확히했습니다. 하지만이 접근 방식에는 두 가지 불편 함이 있습니다.
- 이 모든 0을 직접 입력하면 오류가 발생하기 쉽습니다.
- 결과는 개발 당시 10 진수 또는 16 진수 형식으로 제공되지 않습니다.
대안 적 접근을 제안 할 수 있습니다
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"를 검색하면 몇 가지 항목이 나타납니다.
There is an octal syntax (prefix your number with 0), decimal syntax and hexadecimal syntax with a "0x" prefix. But no syntax for binary notation.
Some examples:
int i = 0xcafe ; // hexadecimal case
int j = 045 ; // octal case
int l = 42 ; // decimal case
If you want to mess around with lots of binary you could define some constants:
public static final int BIT_0 = 0x00000001;
public static final int BIT_1 = 0x00000002;
etc.
or
public static final int B_00000001 = 0x00000001;
public static final int B_00000010 = 0x00000002;
public static final int B_00000100 = 0x00000004;
Slightly more awkward answer:
public class Main {
public static void main(String[] args) {
byte b = Byte.parseByte("10", 2);
Byte bb = new Byte(b);
System.out.println("bb should be 2, value is \"" + bb.intValue() + "\"" );
}
}
which outputs [java] bb should be 2, value is "2"
참고URL : https://stackoverflow.com/questions/867365/in-java-can-i-define-an-integer-constant-in-binary-format
'developer tip' 카테고리의 다른 글
git 프록시를 기본 구성으로 재설정 (0) | 2020.09.17 |
---|---|
(임의의) 필드 이름으로 구조체 배열을 정렬하는 가장 짧은 방법은 무엇입니까? (0) | 2020.09.17 |
Laravel Eloquent ORM 거래 (0) | 2020.09.17 |
x + =가 x = x + a보다 빠릅니까? (0) | 2020.09.17 |
MVC3 Razor DropDownListFor 열거 형 (0) | 2020.09.17 |