2017-01-02 10 views
0

,(1u << x << y)는 무엇을 의미합니까? 나는 문제가

1U << 0 = 1 

1U << 1 = 2 

1U << 2 = 4 

등 ... 좋아요 ...

예를 들어

;

1u<<1<<2 

이 뜻을 말해 줄 수 있습니까? <<1로서

+0

왜 시도하지 않습니까? 결과를 인쇄하는 작은 프로그램을 만드십시오. –

+0

#define LED_RED (1U << 1) .......... * ((부호없는 int 휘발성 *) (0x40025000 + (LED_BLUE << 2)) = LED_BLUE; 그러나 그것을 이해하지 못합니다 – aytac

+0

[ask]를 제공하고 [mcve]를 제공합니다. ** 간단히'<< "연산자에 대한 간단한 검색을 통해 찾을 수있는 다양한 페이지에 대한 설명은 무엇입니까 ** 명확하지 않은 질문은 무엇입니까? ? – Olaf

답변

1

이것이 1U<<1<<2 = 2<<2 = 8U

1 좌측 연관 2이다이 식에서 같은 우선 순위의 순서를 작업자에 나타내는 연관성 : Biwise 시프트
2 좌측 적용된.
참고 : 이론 1U<<x 이식성 그래서 서명 인수의 비트 시프트 연산의 결과는 운영자 우선 순위 규칙은 방법 C의 발현을 지시1<<x

+0

수정 : '32'가 아니라 '32'입니다! – Olaf

+0

예, 그러면 8U가 될 것입니다. @Olaf – coderredoc

+0

그렇기 때문에 그러한 표현식에 괄호 (및 공백)를 사용합니다. 올바른 용어의 서명을 받아야합니다. – Olaf

0

보다 구현 정의 결과를 얻을 동일한 라인에있는 여러 개의 피연산자가 구문 분석됩니다. 이것은 C 언어의 진부한 부분이므로 operator precedence table은 이해하기에 유용한 도구입니다. 이 경우

동일한 우선 두 << 연산자 존재하므로 피연산자의 그룹의 운영자 연관성 다음 식 분석 방법을 지시한다. 시프트 연산자는 왼쪽에서 오른쪽으로 표시되므로식이 (1u<<1)<<2으로 구문 분석 될 수 있습니다.

즉, 정확히 1u << 3을 쓰는 것과 같습니다.

접미어 u은 정수 상수 1이 부호없는 유형임을 보장합니다. 1을 입력 한 경우이 정수 상수 1은 intsigned입니다. 부호있는 정수 유형에 대한 시프트 연산을 수행하면 모든 종류의 정의되지 않은 동작 (버그)이 발생할 수 있으므로 항상 피해야합니다. 예를 들어 1 << 31은 32 비트 시스템에서 심각한 버그 인 반면 1u << 31은 완벽하고 안전합니다.

+0

Lundin, 고마워. 대답 해. – aytac

관련 문제