Quiero que a AlwaysPositive se le asigne un número positivo con todos los valores posibles para lareValue1 y largeValue2 (estos son al menos 1).¿Puedo evitar un desbordamiento de enteros en C# utilizando un desplazamiento a la derecha sin signo?
La siguiente instrucción provoca un desbordamiento de búfer:
int alwaysPositive = (largeValue1 + largeValue2)/2;
Sé que puedo evitar que restando y sumando:
int alwaysPositive = largeValue1 + ((largeValue2 - largeValue1)/2);
Pero en otros lenguajes de programación puedo utilizar un BitShift sin firmar que hacer el truco:
int alwaysPositive3 = (largeValue1 + largeValue2) >>> 1;
¿Cómo puedo hacer esto en C#?
Las respuestas a continuación resuelven el problema. Probablemente haya muchas formas de hacerlo, pero todas (incluidas mis soluciones) tienen algo en común: todas se ven ofuscadas.
Perdona mi ignorancia, pero ¿por qué querrías hacer esto? –
La razón por la que intenté hacer esto es reinventando la rueda: implementando una búsqueda binaria. ¿Por qué debería escribir mi propia versión? No sé ... – Paco
Solo FYI, las muestras de tu código hacen cosas diferentes. Creo que quieres paréntesis en el primero. PD. ¿Te inspiraste en http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html? –