2014-10-22 2 views
-2

나는 (아니 그것이 속기 버전입니다) 여기이 문에있는 조각은, C의 경우-else 문 ++의 상태를 이해하려고 노력하고 있어요 :& 연산자는 무엇을 의미합니까?

for (int i = 0; i < 8; ++i) 
    { 
     Point newCenter = center; 
     newCenter.x += oneEighth.x * (i&4 ? 0.5f : -0.5f); 
    } 

내가 0.5F이 보유하고 있음을 이해한다 조건이 참이면 -0.5f, 그렇지 않으면 i&4은 무엇을 의미합니까?

+0

비트 연산자 "and"입니다. http://en.wikipedia.org/wiki/Bitwise_operation 여기서'? :'연산자와 관련이 없음 –

+0

어떤 C++ 참조 문서를 참조했으며 그 내용은 무엇입니까? [여기에 몇 가지 있습니다] (http://en.cppreference.com/). – Angew

+2

사실, 완전한 대답은 "상황에 달려 있습니다"였을 것입니다. 단항 연산자로 사용되는 "주소"입니다. 이항 연산자로서, 그것은 사실 비트 AND입니다. 그건 그렇고 - 둘 다 결과는 쉽게 찾을 수있는 연산자의 모든 테이블을보고 C + + 구글 그 찾는다. – Leeor

답변

2

두 가지를 사용하고 있으며, 첫째는 비트 단위 AND 연산자 &를 사용하고, 이것은 두 개의 정수의 이진 표현 (i4)을 취하고 이 두 가지의 비트 AND를 계산합니다. 즉, 결과의 이진 표현에서 각 위치에 대해 두 인수의 해당 위치에있는 비트를 확인하고 결과 비트를 1으로 설정합니다. 인수가 1 인 경우), 둘째로 암시적인 int에서 bool으로의 변환을 사용하며 정수가 0이 아닌 경우 true을 반환합니다. 우리가 i=7이있는 경우 예를 들어

, 다음 2의 보수에서이 내부 비트 표현은 다음과 같습니다

/*24 0s*/ 0 0 0 0 0 1 1 1 

그리고 4의 2의 보수 표현 /*24 0s*/ 0 0 0 0 0 1 0 0 그래서 비트입니다 AND /*24 0s*/ 0 0 0 0 0 1 0 0과 같다 이것은 0과 같지 않으며 암시 적으로 true으로 변환되므로 조건이 충족됩니다. 우리가 i=2을 고려하는 경우

는 또한, 우리는 내부 표현이 있습니다

/*24 0s*/ 0 0 0 0 0 0 1 0 

그리고 따라서 비트 단위 AND /*24 0s*/ 0 0 0 0 0 0 0 0를 제공하고, 따라서 조건이 충족되지 않습니다.

1

연산자는 비트 AND입니다. 비트 단위 이진 AND는 이진 형식에서 숫자의 각 위치에있는 비트의 논리적 AND를 수행합니다.

그래서 코드의 i & 4는 4, 5, 6, 7 일 때 4의 기본 2 표현이 100이기 때문에 4가 참입니다. & 4의 기본 -2 표현이 i가 3 번째 위치에 1 (좌우)이 여기

+0

'위의 테이블 '은 무엇입니까? – user2079303

+0

숫자 목록이 모든 가능한 숫자가 아닙니다. –

+0

예, 게시물의 for 문은 for (int i = 0; i <8; ++ i)입니다. 그래서 8 이하의 숫자 만 나열했습니다 –

관련 문제