Saltar al contenido

obtenga el valor absoluto sin usar la función abs ni la declaración if

Esta es la contestación más correcta que encomtrarás aportar, pero primero obsérvala detenidamente y analiza si es compatible a tu proyecto.

Solución:

De Bit Twiddler Hacks:

int v;           // we want to find the absolute value of v
unsigned int r;  // the result goes here 
int const mask = v >> sizeof(int) * CHAR_BIT - 1;

r = (v + mask) ^ mask;

int abs(int v) 

  return v * ((v>0) - (v<0));

Este código multiplica el valor de v con -1 o 1 para obtener abdominales (v). Por lo tanto, dentro del paréntesis estará uno de -1 o 1.

Si v es positivo, la expresión (v>0) es true y tendrá el valor 1 tiempo (v<0) es false (con valor 0 para false). Por lo tanto, cuando v es positivo ((v>0) - (v<0)) = (1-0) = 1. Y toda la expresión es: v * (1) == v.

Si v es negativo, la expresión (v>0) es false y tendrá el valor 0 tiempo (v<0) es true (valor 1). Así, para negativo v, ((v>0) - (v<0)) = (0-1) = -1. Y toda la expresión es: v * (-1) == -v.

Cuando v == 0ambas cosas (v<0) y (v>0) evaluará a 0, dejando: v * 0 == 0.

Sin sucursales:

int abs (int n) 
    const int ret[2] =  n, -n ;
    return ret [n<0];

Nota 4.7 Conversiones Integrales / 4:[...] If the source type is bool, the value false is converted to zero and the value true is converted to one.

Si conservas algún reparo o capacidad de enriquecer nuestro artículo te recordamos añadir un exégesis y con gusto lo analizaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *