Asuntos Oficiales > Retos
Bitwise Operations
Nagisa:
Gracias, gracias... realmente no era dificil :whistling:
sés:
Acabo de entrar en los foros por culpa de JuanK :P
Estaba mirando los retos y he visto este: Bitwise Operations
Solo quería dar mi solución:
--- Código: Text ---int checkOverflow( unsigned n1, unsigned n2 ){ int mask = 0x80; while( mask & ((n1 & mask) ^ (n2 & mask)) ) { mask >>= 1; mask &= 0x7fffffff; } return mask & (n1 & mask) & (n2 & mask);}
Esta función devuelve verdadero si hay desbordamiento al sumar los números.
Es para enteros de 4 bytes, pero es fácil modificarlo para otros tamaños.
P.D.: El hilo del reto está cerrado, así que pongo mi solución aquí (pido perdón si no es el lugar apropiado).
carlos20:
--- Citar ---Acabo de entrar en los foros por culpa de JuanK
Estaba mirando los retos y he visto este: Bitwise Operations
Solo quería dar mi solución:
CODE
int checkOverflow( unsigned n1, unsigned n2 )
{
int mask = 0x80;
while( mask & ((n1 & mask) ^ (n2 & mask)) ) {
mask >>= 1;
mask &= 0x7fffffff;
}
return mask & (n1 & mask) & (n2 & mask);
}
Esta función devuelve verdadero si hay desbordamiento al sumar los números.
Es para enteros de 4 bytes, pero es fácil modificarlo para otros tamaños.
P.D.: El hilo del reto está cerrado, así que pongo mi solución aquí (pido perdón si no es el lugar apropiado).
--- Fin de la cita ---
:think: hay algo extraño en este mensaje pero no importa :lol: .
Esta es mi solucion funciona con int de 4 bytes , si hay desborde al sumar dos enteros mostrara el mensaje "Error" si no hay desborde mostrara la suma de los dos enteros.
<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->
#include<iostream>
using namespace std;
int main(void){
unsigned int A,B;
cout<<"Ingrese A y B"<<endl;
cin>>A>>B;
(~A>=B) ? cout<<A<<"+"<<B<<"="<<A+B<<endl : cout<<A<<"+"<<B<<"="<<"Error"<<endl;
return 1;
}
<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->
¿ y como funciona ?
para saber si hay desborde al sumar dos enteros solo tienes que hacer ~A>=B si esto es falso hay desborde si es verdadero no hay desborde en la suma
¿ por que funciona ?
es muy facil...
sés:
--- Cita de: "carlos20" ---:think: hay algo extraño en este mensaje pero no importa :lol: .
--- Fin de la cita ---
No sé que tiene de extraño mi mensaje... ni sé porqué no te crees que acabe de entrar a los foros (aunque esto lo borraste). Solo tienes que mirar mi fecha de registro.
--- Cita de: "carlos20" ---¿ y como funciona ?
para saber si hay desborde al sumar dos enteros solo tienes que hacer ~A>=B si esto es falso hay desborde si es verdadero no hay desborde en la suma
¿ por que funciona ?
es muy facil...
--- Fin de la cita ---
No sabía ese truco, me lo apunto.
Ahora tres cositas:
1º Acabo de entrar a los foros. Cuando vi el reto del desbordamiento pensé un algoritmo en 5 min. y me registré para ponerlo. Si le hubiera dedicado más tiempo probablemente hubiera dado con unomejor.
2º No sé si eres bueno... pero lo que tengas de bueno te falta en educación. No sé a qué viene dudar de mí nada más llegar, pero bueno... ya he visto otros mensajes tuyos en el foro y veo que la educación no es tu fuerte *mira a Nagisa*... simplemente te ignoraré.
3º Tu método usa una comparación, lo que significa que hace una resta. Eso me da que no sería válido para el reto.
JuanK:
--- Cita de: "ses" ---3º Tu método usa una comparación, lo que significa que hace una resta. Eso me da que no sería válido para el reto.
--- Fin de la cita ---
el >= no es una resta ya que el compilador lo convierte en un JB o en un JNAE segun sea mas conveniente, esta instruccion se realiza en un solo ciclo de procesamiento cosa que en una resta se haria en dos ciclos usando posiblemente SUB y una instruccion de transferencia como JA JB o las otras...
aunque ahora que lo pienso me queda la duda pues un JB o un JNAE se usan solo despues de realizar una operacion .. qaue posiblemente sea una resta... habra que averiguar..
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa