programing

"|="는 무슨 뜻인가?(파이프 이퀄 오퍼레이터)

prostudy 2022. 5. 16. 20:59
반응형

"|="는 무슨 뜻인가?(파이프 이퀄 오퍼레이터)

구글 검색과 스택 오버플로우를 이용해 검색해봤지만 결과가 나오지 않았다.opensource 라이브러리 코드에서 확인했음:

Notification notification = new Notification(icon, tickerText, when);
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;

"|="()이란 무엇인가?pipe equal operator)는 의미?

|=와 같은 방법으로 읽다+=.

notification.defaults |= Notification.DEFAULT_SOUND;

와 같다

notification.defaults = notification.defaults | Notification.DEFAULT_SOUND;

어디에|비트-와이즈 OR 연산자.

모든 연산자는 여기에서 참조된다.

비트-와이즈 연산자를 사용하는 이유는 그러한 상수가 int에서 플래그를 전달할 수 있기 때문이다.

이 상수들을 보면 두 개의 힘이 있다는 것을 알 수 있을 것이다.

public static final int DEFAULT_SOUND = 1;
public static final int DEFAULT_VIBRATE = 2; // is the same than 1<<1 or 10 in binary
public static final int DEFAULT_LIGHTS = 4; // is the same than 1<<2 or 100 in binary

따라서 비트-와이즈 OR을 사용하여 플래그를 추가할 수 있음

int myFlags = DEFAULT_SOUND | DEFAULT_VIBRATE; // same as 001 | 010, producing 011

그렇게

myFlags |= DEFAULT_LIGHTS;

단순히 깃발을 다는 것을 의미한다.

그리고 대칭적으로, 우리는 깃발이&:

boolean hasVibrate = (DEFAULT_VIBRATE & myFlags) != 0;

너는 이미 너의 질문에 대한 충분한 답을 가지고 있다.하지만 아마 내가 너에게 더 도움이 될거야.|=이항 연산자의 종류.

비트 연산자를 위한 표를 작성하는 중:
다음은 유효하다.

----------------------------------------------------------------------------------------
Operator   Description                                   Example
----------------------------------------------------------------------------------------
|=        bitwise inclusive OR and assignment operator   C |= 2 is same as C = C | 2
^=        bitwise exclusive OR and assignment operator   C ^= 2 is same as C = C ^ 2
&=        Bitwise AND assignment operator                C &= 2 is same as C = C & 2
<<=       Left shift AND assignment operator             C <<= 2 is same as C = C << 2
>>=       Right shift AND assignment operator            C >>= 2 is same as C = C >> 2  
----------------------------------------------------------------------------------------

모든 연산자는 이항 연산자임을 주지한다.

또한 참고:

  • >>>Java에서 Unsigned shift라고 하는 비트 연산자
    그렇지만>>>=자바에서는 운영자가 아니다.>>>>= 연산자

  • ~비트보충 비트,0 to 1 and 1 to 0(단일 연산자) 그러나~=조작자가 아니다.

  • 또한.!논리적 NOT 연산자(Logical NOT Operator)로 호출되었지만!=두 피연산자의 값이 동일한지 여부를 확인하고, 값이 같지 않으면 조건이 참이 된다.(A != B) is true로서.A=!B라는 뜻이다.B이다true그때A되다false(그리고 만약B이다false그때A되다true).

측면 참고: 파이프라고 하는 것이 아니라 OR이라고 하는 대신, 파이프는 용어로서 한 프로세스를 다음으로 이동시킨다.

나는 무엇에 대한 답을 찾고 있었다.|=그루비에서는 그렇다. 위의 답변이 옳다고 해도 내가 보고 있던 특정 코드를 이해하는데 도움이 되지 않았다.

특히, 부울 변수 "|="에 적용하면 오른쪽에서 처음으로 투덜거리는 표현식과 마주칠 때 TRUE로 설정되며, 이후의 모든 통화에 대해 TRUE 값을 유지할 것이다.빗장처럼.

여기에 간략한 예가 있다.

groovy> boolean result  
groovy> //------------ 
groovy> println result           //<-- False by default
groovy> println result |= false 
groovy> println result |= true   //<-- set to True and latched on to it
groovy> println result |= false 

출력:

false
false
true
true

편집: 이 기능이 유용한 이유는?

다양한 개체에서 변경된 내용이 있는지 확인하고, 변경된 내용이 있으면 일부에 알리려는 상황을 고려해 보십시오.그래서, 당신은 어떤 것을hasChanges부울하고 로 설정하다.|= diff (a,b)그 다음에|= dif(b,c) 예가 있다 여기 간단한 예가 있다.

groovy> boolean hasChanges, a, b, c, d 
groovy> diff = {x,y -> x!=y}  
groovy> hasChanges |= diff(a,b) 
groovy> hasChanges |= diff(b,c) 
groovy> hasChanges |= diff(true,false) 
groovy> hasChanges |= diff(c,d) 
groovy> hasChanges 

Result: true

이것의 줄임말이다.

notification.defaults = notification.defaults | Notification.DEFAULT_SOUND;

그리고|약간 현명하게 수술하는 거야

|비트-오어 연산자(bitwise or operator)이며, 다음과 같이 적용되고 있다.+=.

주: ||= 존재하지 않는다.(논리적 또는) 사용할 수 있다.

y= y || expr; // expr is NOT evaluated if y==true

또는

y = expr ? true : y;  // expr is always evaluated.

참조URL: https://stackoverflow.com/questions/14295469/what-does-mean-pipe-equal-operator

반응형