2014-12-22 6 views
-6

내가 코드의이 부분에 대해 궁금하네요이 0xffffffff를 무엇이며 << 자바

int mask = 0xffffffff << (32 - prefix); 
System.out.println("Prefix=" + prefix); 
System.out.println("Address=" + ip); 
int value = mask; 
byte[] bytes = new byte[]{ 
(byte)(value >>> 24), (byte)(value >> 16 & 0xff), 
(byte)(value >> 8 & 0xff), 
(byte)(value & 0xff) }; 
try { 
InetAddress netAddr = InetAddress.getByAddress(bytes); 
System.out.println("Mask=" + netAddr.getHostAddress()); 
+3

_ "다른 사람이 각 줄 끝에서 주석을 달 수 있기를 바랍니다"_ 그래서 코드 변환기 서비스가 아닙니다. 어떤 부분이 불분명합니까? <<가하는 일을 검색 했습니까? http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html –

+1

가능한 [비트 시프트 연산자]를 참조하십시오. 서명 및 서명] (http://stackoverflow.com/questions/2244387/bitwise-shift-operators-signed-and-unsigned) – Palpatim

답변

4

<<은 왼쪽 Shift 연산자 (그것은 IP 마스크 코드입니다). >>은 오른쪽 Shift 연산자입니다. Java here에서 비트 시프트에 대해 읽을 수 있습니다.

0xffffffff는 hexadecimal number입니다.

1

이들은 16 진수 및 비트 연산입니다.

16 진수는 기수가 16 인 숫자 시스템을 사용합니다. 따라서 0xffff 의미 : 니블 (하나는 16 진수), 4 비트에 정확히 매핑 때문에 주로 유용

(((15*16+15)*16+15)*16+15)*16+15=65'535 

. F은 이진수가 1111이므로 0xffff1111 1111 1111 1111 (또는 마지막 16 비트는 1)을 의미합니다.

<<>>은 비트 산술 시프트입니다. 만약 0xffff<<8를 지정하는 경우는, 따라서 왼쪽 숫자를 8 비트 시프트 의미

 1111 1111 1111 1111    ff ff ff ff 
<<      8    <<   8 
------------------------    -------------- 
1111 1111 1111 1111 0000    ff ff ff ff 00 

>> 반대 방향으로 이동하고, 하지만는 최상위 비트는 상기 새로운 비트의 값을 결정 왼쪽. 왼쪽 비트가 0이어야 할 경우 논리적 우 시프트 (>>>)을 사용해야합니다.

다른 비트 조작 |, &, ~^ 포함 (&&, || 등과 혼동하지 말 것).

관련 문제