^
(캐럿) 연산자는 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의 의도는 계산하는 것이 었습니다. 이 답변의 다음 부분은이 작업에 지수가 필요하지 않다는 것을 설명합니다.int
Integer.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까지의 누락 된 숫자 찾기
- 네트워크를 통해 전송 된 데이터의 기본 유효성 검사
비트 현명한 연산자, 흥미로운 주제를 사용하여 많은 트릭을 수행 할 수 있습니다.
