2013-10-14 2 views
-2

누구나 정확히 다음 코드 줄이 무엇을 만들어 내는지 설명해 주시겠습니까?정확히 무엇을 의미합니까?

i = 1<<(sizeof(n) * 8 - 1); 

'n'에 대해 원하는 모든 값을 사용할 수 있습니다. 부스 알고리즘을 사용하여 8 비트 곱셈 프로그램을 구현하려고합니다.

+2

'<< '비트 단위 연산자라고하는 것은 ...이 링크 도움이 http://www.cprogramming.com/tutorial/bitwise_operators.html에게의 평가에 대한 –

+1

이유를 찾을 수 -4 ? – EverythingRightPlace

+1

@ 크리스 아니지만, 그래? 그의 코드는 가장 중요한 비트 n이 1로 설정된 무언가를 제공합니다. – PeterT

답변

7

의 그것을 분해 보자

  • sizeof(n) 변수 n의 유형의 크기를 제공합니다. 32 비트 시스템상의 int 변수 n의 경우, 이는 예를 들어. 4 (바이트) 여야합니다. 예를 들어 sizeof 문서를 참조하십시오. 여기서는
  • * 8http://en.cppreference.com/w/cpp/keyword/sizeof) - 한 바이트의 비트 수에 의해> 승산 -> 즉 sizeof(n) * 8n 필요한 비트의 수를 제공한다.
  • <<은 shiftleft 연산자입니다. 두 번째 피연산자가 지정한 비트 수만큼 왼쪽으로 첫 번째 피연산자를 이동합니다 (여기를 참조하십시오 : http://en.wikipedia.org/wiki/Logical_shift). 논리적 인 변화입니다. 오른쪽에서부터 이동 한 비트는 0으로 채워집니다.

전체 표현식이 때문에 1

예 변수 n 세트하여 높은 비트 표현할와 expresssion 전달 (입력 char이어야 지금 n 가정하고, 통상적으로 문자의 크기를 가정 1 바이트) :

sizeof(char) = 1 
=> sizeof(char) * 8 - 1 = 7 
=> 1 << 7 = 10000000 
+0

정말 고마워요! – summerNight

관련 문제