2011-12-31 2 views
0

나는 이것이 매우 간단한 질문이지만, "< <"문자를 무시하므로 Google에서 대답을 찾는 데 어려움이 있습니다. 만약 당신이 미래에 이런 것들을 어떻게 찾아야하는지에 대한 조언이 있다면 그것은 또한 크게 감사 할 것입니다. 나는 그 종류의 작은 바늘 또는 무엇인가를 생각 나게하는 것처럼 보인다? 그러나 나는 그 의미가 무엇인지, 그것이 -1인지 또는 다른 것인가가 마치 -1이 사용되지 않는 이유를 모른다는 것처럼 실제로 작동 하는지를 실제로 알지 못합니다. 감사합니다num >> 1은 C++에서 무엇을 의미합니까?

+2

* "나는 일종의 임시 변통이나 그와 비슷한 것을 기억하고 있나?"* - 당신은 그걸 찾으려고하지 않았습니까? 그것은'''보다 훨씬 더 구글 친화적인데, 특히''C++ ''을 추가한다면 더욱 그렇습니다. –

+0

읽어보기 - http://en.wikipedia.org/wiki/Bitwise_operation – adatapost

+0

그래, 나는 내가 이미 그 문장을 쓰고있을 때까지 그것이 비트 시프트와 관련이 있다는 것을 기억했다는 것을 몰랐다. 게시물. 그 죄송합니다.그것이 당신의 머리에 먼저 바이너리로 변환해야 할 일을 이해하는 것이 훨씬 더 어려워 보이기 때문에 그것을 사용하는 것의 이점은 무엇입니까? 오, 죄송 합니다만 2로 나누는 것과 똑같은가요? Jk 나는 그것을 설명하는 이것의 밑에 최고 투표 한 응답을 지금주의했다. – emschorsch

답변

8

It ('>>')은 왼쪽 피연산자가 정수형 인 컨텍스트에서 '오른쪽 시프트'를 의미합니다. 부호없는 유형의 경우 uvalue >> 1은 2로 나누고 값을 잘라내는 것과 같습니다. 최하위 비트를 삭제하고, 모든 다른 비트를 한 위치 아래로 이동하고, 최상위 비트에 0을 삽입합니다. 부호있는 유형 및 양수 값의 경우 동작은 동일합니다. 값이 음수이면, 동작은 구현에 따라 결정되는 것이 가장 좋습니다.

왼쪽 피연산자가 입력 스트림 인 경우 입력 작업입니다 (단, 1과 같은 리터럴에는 입력 할 수 없지만 l과 같은 변수를 사용할 수는 있습니다).

마찬가지로 '<<'은 왼쪽 피연산자가 정수 유형 인 컨텍스트에서 왼쪽 쉬프트를 의미하며 왼쪽 피연산자가 출력 스트림 일 때 출력 연산을 의미합니다.

물론 왼쪽 피연산자가 클래스 인 경우 연산은 클래스가 연산을 정의하는 모든 것을 의미합니다. I/O 스트림은 '클래스가 의미하는 작업을 정의하는'특수한 경우입니다.

LH 피연산자가 N 비트의 정수인 경우 (유형이 int보다 작 으면 승격 될 때), 0과 N-1 사이의 RH 값만큼 시프트하는 것만 유효합니다. 크거나 작은 시프트는 정의되지 않은 동작을 생성합니다. 특히 N으로 시프 팅하는 것은 정의되지 않은 동작입니다.

클래스 및 I/O 스트림에 대한 주석은 C에 적용되지 않지만 피연산자가 모두 정수인 경우 C에서의 동작은 C++에서와 동일합니다.

+0

죄송합니다. 왼쪽은 정수 변수입니다. – emschorsch

1

이 한 곳으로 num의 바이너리 오른쪽 시프트입니다. 아주 좋은 tutorial here가 있습니다.

+0

튜토리얼 덕분에 도움이되었습니다. – emschorsch

0

예 : int m=16; //(10000) n=m>>1; //n=(01000)은 십진수로 n=8이됩니다.

관련 문제