2012-07-17 2 views
3

>>>의 작동 방식을 이해했습니다. 그것을 위해 나는이 프로그램이 있습니다>>> 연산자가 Java에서 작동하는 방식

public class Main { 
    public static void main(String[] args) 
    { 
     short i = 130; 
     byte b = (byte)i; 
     String a = Integer.toBinaryString(256 + (int) b); 
     System.out.println(Integer.toBinaryString(i)); 
     System.out.println(a.substring(a.length() -8)); 
     System.out.println(b); 

     byte c = (byte) (b >>> 2); 
     String x = Integer.toBinaryString(256 + (int) c); 

     System.out.println(x.substring(x.length() -8)); 
     System.out.println(c); 
    } 
} 

을 그리고이 출력을 얻을 :

10000010 
10000010 
-126 
11100000 
-32 

는 바이너리로 표시하려면 어떻게 바이너리 문자열로 바이트를 표시하는 here을 발견했다.

운영자 >>>는 0을 추가 할 것입니다,하지만 난이 얻을 :의 대신

-126 
11100000 
-63 

을 :

-126 
10100000 
-32 

그것은 1 0 대신 추가된다

11100000 
10100000 

무엇 오전 내가 잘못하고있어? 아마 나는 아무것도 이해하지 못한다.

+2

@DanielDiPaolo wrong. 또한이 질문에 대한 답변을 마치기 전에 – Woot4Moo

+0

@DanielDiPaolo'>>>'이 0 자릿수 오른쪽 시프트 인 것으로 느껴집니다. – Mysticial

답변

8

문제는 b >>> 2 먼저 즉, 값 -126으로 int로 b을 추진하고 있다는 점이다

11111111 11111111 11111111 10000010 

바로 의한 2 제로 확장과 함께, 당신이 얻을 이동 :

00111111 11111111 11111111 11100000 

그 다음 다시 바이트로 변환하면 처음 세 단어가 없어져서 11100000이됩니다. 이는 현재보고있는 내용입니다.

비트 이동에 대한 자세한 내용은 JLS의 section 15.19을 참조하십시오.

+0

나는 당신이 C#에 대해 수행 한 다른 게시물에서 답을 연결하려고합니다. – Woot4Moo

+0

답변 해 주셔서 감사합니다. 바이너리 문자열로 바이트를 표현할 다른 것이 있는지 알고 있습니까? 고마워. – VansFannel

+0

@VansFannel : 나는 아마도 'Integer.toBinaryString (b & 0xff)'를 사용 하겠지만, 누구도 알지 못합니다. –

관련 문제