2012-10-06 5 views
1

임계 값을 계산하기로되어있는 표현식이 있습니다. 원래 코드는했다 :바이트 연산 C#

float threshold = vertHist.min + ((vertHist.max - vertHist.min)/2); 

하지만이었다 다음에 수정 :

retVal.threshold = (byte)(minValue + ((maxValue - minValue) >> 1)); 

내가 원래 코드와 그 뒤에 논리를 이해할 수 있지만, 누군가가 친절하다, 후자의 코드를 통해 저를 걸을 수 전자의 개정판?

감사합니다.

+4

>> >> 1은 오른쪽으로 1 씩 시프트하는 것을 의미하며 2의 보수가없는 부호없는 정수형에서 2로 나누는 것과 같습니다. 새 코드는 이해할 수 있도록 대신 '/ 2'를 사용해야합니다. 우리 팀 중 하나가이 코드를 내 코드베이스에 체크인했다면 매우 까다로운 코드 검토를 요구할 것입니다! –

+0

고맙습니다. 이것은 대답을 멋지게 요약합니다. 왜 대답으로 제출하지 않았습니까? – Nate

+1

정수 ('long','int','short','byte')에 대해서만 작동한다는 점에 유의하는 것이 중요합니다. 원래의 값이'float'에 할당되었다는 것을 주목하면, 방정식의 타당성에 대해 궁금합니다. 나는 그렇게 할 수있는 극도로 불필요한 최적화라고 말하며 컴파일러가 확실히 당신을 위해 수행 할 것입니다. 그 외에도 나머지 방정식은 같습니다. – pickypg

답변

1

>>은 비트 오른쪽 시프트 연산자입니다. (당신이 maxValue - minValue이 될 것으로 기대하는) 양의 정수의 경우, (2의 거듭 제곱으로 나누는) 효과를 가지며, 컴파일러는 실제로 2를 나누기 위해 오른쪽 시프트로 나누기 때문에, 네가 특별히 교대 행동을 요구하지 않는다면 교대를 가진 부문.