2013-03-08 2 views
0

을 나타내는 표현.내가이 속기가 어떻게 작동하는지 이해하지

감사

+0

이의 어떤 부분이 문제가된다 :

코드와 동일합니까? 그것은'a? b : c' (삼항 연산자)? 아니면'&'(비트와)입니까? – mwcz

+0

@mwcz : 그것은 [조건부 연산자]입니다 (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Conditional_Operator). –

+0

@MarcelKorpel Guffa의 대답은 그것을 설명합니다 :) – mwcz

답변

1

10000...0001

20000...0010

i는 아마도 INT의 비트로 설정된 플래그 세트를 저장이다.

i & 1 마지막 비트가 설정되어 있고 i & 2이 이전 비트를 테스트하는지 단순히 테스트합니다. the MDN on bitwise operators을 참조하십시오.

당신은이 시스템을 사용하여 자바 스크립트 수의 약 52 플래그를 저장할 수

i = 0; // no flag 
i |= 4; // sets a flag 
i |= 1<<2; // sets the same flag but is more readable 
var bool = i & 4; // truish if the flag is set 

그래서 코드는 다음과 수행을 : 표현 i & 1 ? k : -k가 있는지 여부에 따라 k 또는 -k 중 하나로 평가

if i has flag 1 then o.y += k else o.y += -k 
if i has flag 2 then o.x += k else o.x += -k 
+0

이것은 짝수/홀수 테스트 일 수 있습니까? (나는 좋은 테스트라고 말하고 싶지 않다.) 만약 이상하다면, k에 의해 oy가 증가한다. k에 의해 oy가 감소한다. –

+0

아니, 두 번째 테스트는 기이 한 것으로 볼 것이 없으며, 실제로는 플래그 저장 장치처럼 보인다. C에서). –

2

i & 1true으로 평가됩니다.

연산자는 연산자 사이에 'and'비트를 사용하므로 첫 번째 조건은 최하위 비트가 설정되어 있는지 확인하고 두 번째 조건은 두 번째 최하위 비트가 설정되어 있는지 확인합니다.

nodes.forEach(function(o, i) { 
    if (i & 1) { 
    o.y += k; 
    } else { 
    o.y -= k; 
    } 
    if (i & 2) { 
    o.x += k; 
    } else { 
    o.x -= k; 
    } 
}); 
관련 문제