Google 검색 및 스택 오버플로를 사용하여 검색을 시도했지만 결과가 표시되지 않았습니다. 오픈 소스 라이브러리 코드에서 이것을 보았습니다.
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의 비트 연산자
그러나>>> = 연산자>>>=
하지 자바의 연산자를 사용합니다. -
~
비트 단위 보수 비트입니다.0 to 1 and 1 to 0
(단항 연산자)이지만~=
연산자는 아닙니다. -
또한
!
논리 NOT 연산자라고하지만!=
두 피연산자의 값이 같은지 여부를 확인하고 값이 같지 않으면 조건이 참이됩니다. 예(A != B) is true
. 여기서 같은A=!B
의미하는 경우B
된다true
후A
하게false
(그리고 경우B
이다false
그때A
하게true
).
참고 : |
파이프라고하지 않고 OR이라고하고 파이프는 쉘 용어로 한 프로세스를 다음 프로세스로 옮깁니다.
답변
나는 무엇에 대한 답을 찾고 있었다 |=
Groovy의 기능 있었지만 위의 답변이 옳았지만 내가보고있는 특정 코드를 이해하는 데 도움이되지 않았습니다.
특히, 부울 변수 “| =”에 적용되면 오른쪽에서 처음식이 _ 생할 때 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;
그리고 |
비트 OR입니다.
답변
|
는 IS 비트 또는 오퍼레이터와 같은 것이 적용되고있다 +=
.
답변
참고 : || =가 존재하지 않습니다. (논리적 또는) 사용할 수 있습니다
y= y || expr; // expr is NOT evaluated if y==true
또는
y = expr ? true : y; // expr is always evaluated.