2011-12-11 4 views
2

내 코드는비트 연산자 자바

final int CONST_1 = 1010; 
final int CONST_2 = 1011; 

System.out.println("CONST_1 & CONST_2: " + Integer.toBinaryString(CONST_1 & CONST_2)); 
System.out.println("CONST_1^CONST_2: " + Integer.toBinaryString(CONST_1^CONST_2)); 
System.out.println("CONST_1 | CONST_2: " + Integer.toBinaryString(CONST_1 | CONST_2)); 
System.out.println("~CONST_1 : " + Integer.toBinaryString(~CONST_1)); 

출력은 제 생각에는

CONST_1 & CONST_2: 1111110010 
CONST_1^CONST_2: 1 
CONST_1 | CONST_2: 1111110011 
~CONST_1 : 11111111111111111111110000001101 

입니다 그것은 잘못하고 있어야한다 : 나는 그런 결과를 왜

CONST_1 & CONST_2: 1010 
CONST_1^CONST_2: 1 
CONST_1 | CONST_2: 1011 
~CONST_1 : 101 

설명해주십시오 . 감사!

+3

상수를 초기화 한 값은 바이너리가 아닌 십진수입니다. – ghik

답변

8

변경이이에

final int CONST_1 = 1010; 
final int CONST_2 = 1011; 

는 :

final int CONST_1 = 0b1010; 
final int CONST_2 = 0b1011; 

은 리터럴은 기본적으로 소수 것을 잊지 마십시오. 당신은 분명히 그것들이 바이너리 인 것을 원했을 것입니다.


이진 리터럴에는 Java 1.7이 필요합니다. 즉 사용할 수없는 경우 그래서, 당신이 갈 수 있습니다

final int CONST_1 = Integer.parseInt("1010",2); 
final int CONST_2 = Integer.parseInt("1011",2); 
+0

final int로 변경할 수 없습니다. CONST_1 = 0b1010; – user1057761

+0

이진 리터럴은 소스 레벨 1.7 이상에서만 사용할 수 있습니다. – user1057761

+0

이 질문보기 : (http://stackoverflow.com/questions/867365/in-java-can-i-define-an-integer-constant-in -binary-format)'0b' 접두사는 Java 7이 필요합니다. – Mysticial

0

정수의 이진 표현 만 0과 1로 구성된 정수를 혼동하지 마십시오 ...

정수 (1010) 1111110010입니다 결과는 정확합니다.

1

CONST_1은 십진수로 1010입니다. CONST_1의 이진 값은 1111110010입니다. 마찬가지로 CONST_21111110011입니다.

결과가 더 좋습니까?

0

숫자는 2 진수가 아닙니다. 그들은 십진법으로 쓰여 있습니다. Java 7에이 int가 바이너리임을 알리기 위해 0b를 앞에 붙이고 싶습니다. 주위 또는 HEX에게 문자 표기법을 사용하는 작업 당신이 자바 7을 사용하지 않는 경우이있는 Integer.parseInt을 수행 할 수 있도록 더 진 리터럴 구문이없는 ("1010", 2) :

final int CONST_1_BINARY = 0b1010; 
final int CONST_1_DECIMAL = 1010; 

if(CONST_1_BINARY == CONST_1_DECIMAL) { 
    System.out.println("They are the same!"); 
} else { 
    System.out.println("They are NOT the same."); 
} 
1

을 당신이 알고 있다고 생각 리터럴이 의미하는 것. 그렇지 않은 경우 Java LiteralsLiteral을 참조하십시오.

이제 정수 및 부동 소수점 리터럴은 Java에서 기본적으로 10 진수입니다. 따라서 위에 입력 한 1010 값은 십진수 1010이됩니다. 즉, 천과 열. 당신이 그것들을 바이너리로 원한다면 (그것은 질문에서 분명하다), 많은 가능성이있다.

  • 동등한 10 진수 값을 사용하십시오.

표현할 이진 값에 해당하는 10 진수를 사용할 수 있습니다. 예를 들어 이진 1010의 십진수는 10이고 이진수 1011의 십진수는 11입니다.

final int CONST_1 = 10; 
final int CONST_2 = 11; 
  • 사용 래퍼 클래스 방법

각 클래스 래퍼 인자로도 번호 시스템의베이스를 취하는 해석 방법을 가지고 파싱. 그래서

final int CONST_1 = Integer.parseInt("1010", 2); 
final int CONST_2 = Integer.parseInt("1011", 2); 
  • 당신이 자바 7 사용하는 경우,

진 리터럴은 자바의 이전 버전에서 지원하지 않는 바이너리 리터럴을 사용합니다. Java 7은 바이너리 리터럴을 도입했습니다. features을 참조하십시오.

final int CONST_1 = 0b1010; 
final int CONST_2 = 0b1011;