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


294

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

내가 이것을 시도 할 때 :

int a = 5^n;

... 나에게 준다 :

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

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


5
사용중인 실제 코드를 게시 할 수 있습니까?
Anthony Forloney

나는 일식을 사용하고 있으며 이것은 11을 리턴한다. public class SimpleParser {public static void main (String [] args) {System.out.println ((10 ^ 1)); }}

2
Java에서 ^연산자는 전원 설정을위한 것이 아닙니다. Math.pow대신 필요 합니다. polygenelubricant의 답변을 참조하십시오.
Anthony Forloney

@ WizardOfOdds : 동의, 이것은 좋은 질문입니다 ( ^지수는? 상식입니다!). OP의 자바 언어 탐구는 장려해야한다.
polygenelubricants

답변:


419

자바의 ^ 연산자

^ 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

16
이 답변에 추가하기 위해 OP가 찾고있는 기능은 아마도 Math.pow (10, 1)입니다.
tjohns20

146

많은 사람들이 이미 지적했듯이 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.

에서 여기 .

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


34

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


20

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


15

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

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

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


14

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


13

XOR 연산자 규칙

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

비트 단위 연산자는 비트에 대해 작업하고 비트 단위 작업을 수행합니다. a = 60이고 b = 13이라면; 이제 이진 형식으로 다음과 같습니다-

a = 0011 1100

b = 0000 1101



a^b ==> 0011 1100  (a)
        0000 1101  (b)
        -------------  XOR
        0011 0001  => 49

(a ^ b) will give 49 which is 0011 0001

8

AraK의 링크는 배타적 정의 또는이 부울 값에 대해이 함수가 작동하는 방식을 설명합니다.

누락 된 정보는 이것이 두 정수 (또는 정수 유형 값)에 적용되는 방법입니다. 비트 배타적 또는 두 개의 숫자로 된 해당 이진수의 쌍에 적용되며 결과는 정수 결과로 다시 어셈블됩니다.

예제를 사용하려면

  • 5의 이진 표현은 0101입니다.
  • 4의 이진 표현은 0100입니다.

비트 XOR을 정의하는 간단한 방법은 두 입력 숫자가 다른 모든 위치에 결과가 1이라고 말하는 것입니다.

4와 5의 경우 유일한 차이점은 마지막입니다. 그래서

0101 ^ 0100 = 0001 (5 ^ 4 = 1)입니다.




7

숫자가 이진 형식으로 쓰여질 때 비트의 다른 값 (예 : 1 ^ 0 = 1)에 대해 1을 생성하고 비트의 동일한 값 (예 : 0 ^ 0 = 0)에 대해 0을 생성하는 것은 Java의 비트 xor 연산자입니다.

예 :-

예제를 사용하려면

5의 이진 표현은 0101입니다. 4의 이진 표현은 0100입니다.

Bitwise XOR을 정의하는 간단한 방법은 두 입력 숫자가 다른 모든 위치에 결과가 1이라고 말하는 것입니다.

0101 ^ 0100 = 0001 (5 ^ 4 = 1)입니다.



2

java의 비트 xor 연산자는 다른 값 (예 : 1 ^ 0 = 1)의 경우 1이고 동일한 값 (예 : 0 ^ 0 = 0)의 경우 0입니다.


2

^는 2 진 (base-2에서와 같이) xor이며 지수화되지 않습니다 (Java 연산자로 사용할 수 없음). 지수화에 대해서는 java.lang.Math.pow ()를 참조하십시오.


2

XOR 연산자입니다. 숫자에 대한 비트 연산을 수행하는 데 사용됩니다. 동일한 비트에서 xor 연산을 수행 할 때 0 XOR 0 / 1 XOR 1과 같은 동작을 수행하면 결과는 0입니다. 그러나 비트가 다르면 결과는 1입니다. 따라서 5 ^ 3을 수행하면 이 숫자 5, 6을 이진 형식으로 볼 수 있으므로 식은 (101) XOR (110)이되어 10 진수 표현이 3 인 결과 (011)을 제공합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.