[java] ^ 연산자는 Java에서 무엇을합니까?

^(캐럿) 연산자는 Java에서 어떤 기능을 수행 합니까?

내가 이것을 시도 할 때 :

int a = 5^n;

… 나에게 준다 :

n = 5의 경우
n = 4의 경우 0 을 반환
하고 n = 6의 경우 1 을 반환하고 3을 반환합니다

… 지수를 수행하지 않는 것 같습니다. 그러나 그때는 무엇입니까?



답변

자바의 ^ 연산자

^ Java에서 배타적 연산자 ( “xor”) 연산자입니다.

5^6예를 들어 보자 .

(decimal)    (binary)
     5     =  101
     6     =  110
------------------ xor
     3     =  011

다음은 비트 단위 ( JLS 15.22.1 ) 및 논리 형 ( JLS 15.22.2 ) xor에 대한 진리표입니다 .

^ | 0 1      ^ | F T
--+-----     --+-----
0 | 0 1      F | F T
1 | 1 0      T | T F

더 간단히 말하면, xor를 “this or that, but both !” 로 생각할 수도 있습니다 .

또한보십시오


자바 지수

정수 지수에 관해서는 불행히도 Java에는 그러한 연산자가 없습니다. 사용할 수 있습니다 double Math.pow(double, double)( int필요한 경우 결과 전송 ).

전통적인 비트 시프 팅 트릭을 사용하여 2의 거듭 제곱을 계산할 수도 있습니다. 즉, (1L << k)k 승 2의 2 입니다 k=0..63.

또한보십시오


병합 참고 :이 답변은프로그래밍 연습으로사용하지 않고문자열"8675309"을변환하기 위해 지수를 사용하려는 다른 질문에서 병합되었습니다(지금부터 지수를 나타냅니다). OP의 의도는 계산하는 것이 었습니다. 이 답변의 다음 부분은이 작업에 지수가 필요하지 않다는 것을 설명합니다.intInteger.parseInt^8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0 = 8675309

호너의 계획

귀하의 주소 특정의 필요, 당신은 실제로 당신은 소위 사용할 수 있습니다 (10)의 다양한 능력을 계산 할 필요가 없습니다 호너의 방식을 간단뿐만 아니라 효율적인뿐만 아니라,.

당신이 개인적인 운동으로 이것을하고 있기 때문에, 나는 자바 코드를주지 않을 것이지만 주요 아이디어는 다음과 같습니다.

8675309 = 8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0
        = (((((8*10 + 6)*10 + 7)*10 + 5)*10 + 3)*10 + 0)*10 + 9

처음에는 복잡해 보일 수 있지만 실제로는 그렇지 않습니다. 기본적으로 왼쪽에서 오른쪽으로 숫자를 읽고 다음 숫자를 추가하기 전에 지금까지 결과에 10을 곱합니다.

표 형식으로 :

step   result  digit  result*10+digit
   1   init=0      8                8
   2        8      6               86
   3       86      7              867
   4      867      5             8675
   5     8675      3            86753
   6    86753      0           867530
   7   867530      9          8675309=final


답변

많은 사람들이 이미 지적했듯이 XOR 연산자입니다. 많은 사람들은 이미 지수를 원한다면 Math.pow 를 사용해야한다고 지적했습니다 .

그러나 ^비트 단위 연산자라고 통칭하는 연산자 그룹 중 하나 일뿐입니다.

Operator    Name         Example     Result  Description
a & b       and          3 & 5       1       1 if both bits are 1.
a | b       or           3 | 5       7       1 if either bit is 1.
a ^ b       xor          3 ^ 5       6       1 if both bits are different.
~a          not          ~3          -4      Inverts the bits.
n << p      left shift   3 << 2      12      Shifts the bits of n left p positions. Zero bits are shifted into the low-order positions.
n >> p      right shift  5 >> 2      1       Shifts the bits of n right p positions. If n is a 2's complement signed number, the sign bit is shifted into the high-order positions.
n >>> p     right shift  -4 >>> 28   15      Shifts the bits of n right p positions. Zeros are shifted into the high-order positions.

에서 여기 .

이러한 연산자는 개별 비트를 플래그로 해석해야하는 정수를 읽고 쓸 필요가 있거나 정수의 특정 비트 범위에 특별한 의미가 있고 해당 비트 만 추출하려는 경우에 유용합니다. 이러한 연산자를 사용할 필요없이 매일 많은 프로그래밍 작업을 수행 할 수 있지만 비트 수준에서 데이터 작업을 수행해야하는 경우 이러한 연산자에 대한 지식이 매우 중요합니다.


답변

비트 XOR이며 Java에는 지수 연산자가 없으므로 Math.pow()대신 사용해야 합니다.


답변

XOR 연산자 규칙 =>

0 ^ 0 = 0
1 ^ 1 = 0
0 ^ 1 = 1
1 ^ 0 = 1

4, 5 및 6의 이진 표현 :

4 = 1 0 0
5 = 1 0 1
6 = 1 1 0

이제 5와 4에서 XOR 작업을 수행하십시오.

     5 ^ 4 => 1  0  1   (5)
              1  0  0   (4)
            ----------
              0  0  1   => 1

비슷하게,

5 ^ 5 => 1   0   1    (5)
         1   0   1    (5)
       ------------
         0   0   0   => (0)


5 ^ 6 => 1   0   1  (5)
         1   1   0  (6)
        -----------
         0   1   1  => 3


답변

그것은 인 XOR비트 연산자.


답변

많은 사람들이 이미 그것이 무엇이며 어떻게 사용되는지에 대해 설명했지만이 연산자를 사용하여 다음과 같은 많은 프로그래밍 트릭을 수행 할 수 있습니다.

  • 부울 배열의 모든 요소를 ​​XOR하면 배열에 실제 요소 수가 홀수인지 알려줍니다.
  • 홀수 번 반복되는 것을 제외하고 짝수 번 반복되는 모든 숫자를 가진 배열이있는 경우 모든 요소를 ​​XORing하여 찾을 수 있습니다.
  • 임시 변수를 사용하지 않고 값 교환
  • 1에서 n까지의 누락 된 숫자 찾기
  • 네트워크를 통해 전송 된 데이터의 기본 유효성 검사

비트 현명한 연산자, 흥미로운 주제를 사용하여 많은 트릭을 수행 할 수 있습니다.


답변

다른 사람들이 말했듯이 비트 XOR입니다. 주어진 거듭 제곱으로 숫자를 올리려면를 사용하십시오 Math.pow(a , b). 여기서 a, 숫자는 숫자 b입니다.