• Miércoles 20 de Noviembre de 2024, 12:30

Autor Tema:  Bitwise Operations  (Leído 10426 veces)

Noel Solw

  • Miembro activo
  • **
  • Mensajes: 81
    • Ver Perfil
Bitwise Operations
« en: Sábado 29 de Mayo de 2004, 23:56 »
0
Problema a solucionar por medio de operaciones con bits : (&,|,^,~,>>,<<)
Dados dos numeros unsigned int a,b, determinar sin hacer la suma, si existe el peligro de overflow al realizar la operacion a + b.
Se presentan 3 casos :
[a] : la cifra mas significativa de a y b es “0”, pueden sumarse siempre.
: la cifra mas significativa de a y b es “1”, nunca pueden sumarse.
[c] : una de las cifras mas significativa es “1” y la otra “0”, este es el caso interesante y hay que programar una solucion.
 
Tengo el problema solucionado y si no recibo soluciones hasta el 10/6/2004,
lo publicare en este foro.
Mi intencion es encontrar soluciones diferentes a la que yo escribi.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Bitwise Operations
« Respuesta #1 en: Martes 1 de Junio de 2004, 07:35 »
0
adecua el formato del reto al formato del foro..
debes incluir un ejemplo de los datos de entrada y datos de salida

si tengo tiempo lo hare el fin de semana.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Noel Solw

  • Miembro activo
  • **
  • Mensajes: 81
    • Ver Perfil
Re: Bitwise Operations
« Respuesta #2 en: Jueves 3 de Junio de 2004, 09:40 »
0
Ejemplos de datos de entrada y salida:

bitwise operations : overflow check for addition of two unsigned int.

a = 30404
b = 40000
sum = 30404 + 40000 = 4868    wrong

a = 65534
b = 1
sum = 65534 + 1 = 65535        ok

a = 65534
b = 2
sum = 65534 + 2 = 0    wrong

a = 0

end of program - good bye ! ! !

Ayudaria hacer impresiones intermedias de los numeros en representacion binaria
La impresion de las sumas es indicativa solamente, no se usan en la resolucion del problema.

The Black Boy

  • Miembro de PLATA
  • *****
  • Mensajes: 1043
  • Nacionalidad: co
    • Ver Perfil
    • http://www.mslatam.com/latam/technet/mva2/Microsite.aspx?alias=JairoDiaz
Re: Bitwise Operations
« Respuesta #3 en: Jueves 3 de Junio de 2004, 21:38 »
0
la verdad sigo sin entender bien que es lo que hay que hacer... :whistling:

Saludos  :adios:
El inteligente no es aquel que lo sabe todo
sino aquel que   sabe utilizar lo poco que sabe.


Espacio Personal

si necesitas algo de programacion click aqui, si no esta aqui no existe

Programacion]

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Bitwise Operations
« Respuesta #4 en: Jueves 3 de Junio de 2004, 21:49 »
0
debes decir si una suma de enteros propduce o no un desboradmiento, es decir determinar si al sumar los enteros el resultado es un tipo de dato mayor que un entero.
Hay que hacer esto sin usar la suma ('+'), solo usando opercaiones binarias..
esta refacil..
por eso digo que tal ves lo haga el fin de semana.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

The Black Boy

  • Miembro de PLATA
  • *****
  • Mensajes: 1043
  • Nacionalidad: co
    • Ver Perfil
    • http://www.mslatam.com/latam/technet/mva2/Microsite.aspx?alias=JairoDiaz
Re: Bitwise Operations
« Respuesta #5 en: Jueves 3 de Junio de 2004, 21:51 »
0
haaa.... si esta muy facil... ;)

Gracias por la aclaracion Juank
El inteligente no es aquel que lo sabe todo
sino aquel que   sabe utilizar lo poco que sabe.


Espacio Personal

si necesitas algo de programacion click aqui, si no esta aqui no existe

Programacion]

Nagisa

  • Miembro MUY activo
  • ***
  • Mensajes: 119
  • Nacionalidad: es
    • Ver Perfil
Re: Bitwise Operations
« Respuesta #6 en: Viernes 4 de Junio de 2004, 21:47 »
0
Si, realmente es muy facil. Yo ya lo tengo, lo que ocurre es que los datos que dan como prueba no producen la salida esperada. La cuestion es que el tamaño de un entero varia segun platraforma y compilador.

En mi ordenador con el gcc es de 32 bits, por lo que para producir un overflow necesitamos un numero del orden de 4.2E9 (algo mas).

Aqui posteo mi solucion, la cual considero bastante "elegante" (no habia hecho un codigo recursivo tan bonito desde mi primer factorial... snif)

(Adjunto como .txt por que como .c no me deja)
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
   

The Black Boy

  • Miembro de PLATA
  • *****
  • Mensajes: 1043
  • Nacionalidad: co
    • Ver Perfil
    • http://www.mslatam.com/latam/technet/mva2/Microsite.aspx?alias=JairoDiaz
Re: Bitwise Operations
« Respuesta #7 en: Sábado 5 de Junio de 2004, 00:44 »
0
te felicito Nagisa...  :good:
El inteligente no es aquel que lo sabe todo
sino aquel que   sabe utilizar lo poco que sabe.


Espacio Personal

si necesitas algo de programacion click aqui, si no esta aqui no existe

Programacion]

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Bitwise Operations
« Respuesta #8 en: Sábado 5 de Junio de 2004, 02:39 »
0
:blink:

ahi va uno no recursivo en ASM:
Código: Text
  1.  
  2.   const BitSuperior=&#036;80000000;
  3.   function SumaDesbordada(a,b:dword):longbool;
  4. //  var bit_A,bit_B:dword;
  5.   begin
  6. {    result:=true;
  7.     repeat
  8.       if ((a or B) and bitSuperior)=0 then break;//no
  9.       if ((a and B) and bitSuperior)&#60;&#62;0 then exit;//si
  10.       a:=a shl 1;//siguiente bit superior
  11.       b:=b shl 1;
  12.     until (a or B)=0;
  13.     result:=false;}
  14. {    repeat
  15.       bit_A:=a and BitSuperior;
  16.       bit_B:=b and BitSuperior;
  17.       a:=a shl 1;
  18.       b:=b shl 1;
  19.     until bit_A=bit_B;
  20.     result:=(bit_A&#60;&#62;0);}
  21.     asm
  22.       //a está en eax
  23.       //b está en edx
  24.       //Bitsuperior=esi
  25.       //bit_A=ecx
  26.       //bit_B=ebx
  27.       push ebx// preservar!
  28.       push esi// preservar!
  29.       mov esi,BitSuperior
  30.       @ciclo:
  31.         mov ecx,eax
  32.         and ecx,esi
  33.         mov ebx,edx
  34.         and ebx,esi
  35.         shl eax,1
  36.         shl edx,1
  37.       xor ebx,ecx//cmp hace una resta :P
  38.       jnz @ciclo
  39.       pop esi
  40.       pop ebx
  41.       mov result,ecx//prácticamente igual a mov eax,ecx
  42.     end;
  43.   end;
  44.  
  45.  
  46.  

:blink:

Ya veo el problema:

Esto no funciona (el flag de overflow, ni el de carry) para a y b como enteros de 32bits SIN signo:
Código: Text
  1.  
  2. //Sólo para a y b enteros 32bits con signo
  3.     asm
  4.       //a está en eax
  5.       //b está en edx
  6.       xor ecx,ecx//ecx=false
  7.       add eax,edx//sumar
  8.       jno @fin//saltar si no existe overflow
  9.       not ecx//ecx=true
  10.       @fin:
  11.       mov result,ecx
  12.     end;
  13.  
  14.  

Noel Solw

  • Miembro activo
  • **
  • Mensajes: 81
    • Ver Perfil
Re: Bitwise Operations
« Respuesta #9 en: Domingo 6 de Junio de 2004, 08:55 »
0
Naqisa : la solucion recursiva que enviastes es realmente sumamente elegante, y sobre todo muy simple.
Sinceramente, te felicito ! ! ! - Noel

Nagisa

  • Miembro MUY activo
  • ***
  • Mensajes: 119
  • Nacionalidad: es
    • Ver Perfil
Re: Bitwise Operations
« Respuesta #10 en: Jueves 10 de Junio de 2004, 19:09 »
0
Gracias, gracias... realmente no era dificil :whistling:
   

sés

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Bitwise Operations
« Respuesta #11 en: Miércoles 23 de Marzo de 2005, 15:38 »
0
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
  1. int checkOverflow( unsigned n1, unsigned n2 )
  2. {
  3.   int mask = 0x80;
  4.  
  5.   while( mask & ((n1 & mask) ^ (n2 & mask)) ) {
  6.     mask &#62;&#62;= 1;
  7.     mask &= 0x7fffffff;
  8.   }
  9.  
  10.   return mask & (n1 & mask) & (n2 & mask);
  11. }
  12.  
  13.  

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

  • Miembro activo
  • **
  • Mensajes: 34
    • Ver Perfil
Re: Bitwise Operations
« Respuesta #12 en: Jueves 24 de Marzo de 2005, 00:23 »
0
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).

: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

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Bitwise Operations
« Respuesta #13 en: Jueves 24 de Marzo de 2005, 09:25 »
0
Cita de: "carlos20"
:think: hay algo extraño en este mensaje pero no importa  :lol: .
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...
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

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Bitwise Operations
« Respuesta #14 en: Viernes 25 de Marzo de 2005, 03:43 »
0
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.

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..
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

sés

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Bitwise Operations
« Respuesta #15 en: Viernes 25 de Marzo de 2005, 09:35 »
0
Cita de: "JuanK"
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...
Efectivamente, antes del salto condicional tiene que ir algo, en este caso concreto un CMP o un TEST, que lo que hacen es una RESTA.

Amilius en su solución en ensamblador no usa CMP, usa XOR precisamente por esto.

Además:
Cita de: "Noel Solw"
Problema a solucionar por medio de operaciones con bits : (&,|,^,~,>>,<<)
Se supone que esos son los únicos operadores permitidos, ¿no?

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Bitwise Operations
« Respuesta #16 en: Viernes 25 de Marzo de 2005, 15:53 »
0
Hola ses..
he revisado mis apuntes y esto es lo ue tengo,
en efecto el >= se convierte habitualmente en un

CMP eax, xxxxx
JG   xxxxxx

Pero el CMP no es una resta si fuese una resta seria :
SUB xxxxxxo
SBB xxxxxx
CMPxxxx xxx
JG  xxxxx

Realmente no creo que la instruccion CMP use internamente una resta porque seria muy lento me late que debe hacer un XORo alguna de esas si es posible buscare documentacion al respecto aunque realmente no sipongo de mucho tiempo puesto que al dedicarme al famoso ciadrado magico he descuidado un poco lo de mi tesis de grado  y tengo que compensar el tiempo.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

sés

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Bitwise Operations
« Respuesta #17 en: Viernes 25 de Marzo de 2005, 16:14 »
0
En mi viejo libro de ensamblador para el 386 dicen textualmente que CMP realiza una resta sin almacenar el resultado. Para SUB y CMP indican los mismo ciclos de reloj (por cierto, que CMP viene en la sección de ARITMÉTICAS).

Un vistazo a GameDev.net - Intel 80386 Programmer's Reference Manual verifica esto mismo:

Citar
Description

CMP subtracts the second operand from the first but, unlike the SUB instruction, does not store the result; only the flags are changed. CMP is typically used in conjunction with conditional jumps and the SETcc instruction. (Refer to Appendix D for the list of signed and unsigned flag tests provided.) If an operand greater than one byte is compared to an immediate byte, the byte value is first sign-extended.

Y esto lo pone varias veces:
Citar
...(subtraction instructions SUB, SBB, DEC, AAS, DAS, CMP, and NEG)...

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Bitwise Operations
« Respuesta #18 en: Viernes 25 de Marzo de 2005, 20:45 »
0
Orale, eso si es lo que necesitabamos.. entonces CMP hace una resta sin almacenar resultados... vaya vaya vaya ;)

gracias  :smartass:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

carlos20

  • Miembro activo
  • **
  • Mensajes: 34
    • Ver Perfil
Re: Bitwise Operations
« Respuesta #19 en: Sábado 26 de Marzo de 2005, 10:56 »
0
Hola sés
 Intente resolver este incidente por otras vías pero no fue posible y me veo en la obligación de responderte .

Citar
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é.

Sés después de ese comentario queda demostrado que la educación tampoco es tu fuerte , no se porque te molestaste tanto por lo que dije pero como veo que lo interpretaste mal  te lo explicare lo extraño en tu mensaje es que el programa falla , y me parece extraño que en el primer mensaje de un usuario en un foro sea para reabrir una discusión cerrada hace varios meses para enviar un programa que falla , no te lo dije en mi mensaje anterior porque creí que al decirte que el mensaje tenia algo extraño notarias el error en el programa o porque tal vez el error en el programa fue un error de redacción cuando lo escribiste en tu mensaje , pero mi comentario se presto para un mal entendido y fue por esa razón que lo modifique el mismo día .


Código: Text
  1.  
  2. //compilado en visual c++
  3. #include &#60;iostream&#62;
  4. #include &#60;math.h&#62;
  5.  
  6. using namespace std;
  7.  
  8. //es la misma funcion
  9. int checkOverflow( unsigned n1, unsigned n2 )
  10. {
  11.   int mask = 0x80;
  12.  
  13.   while( mask & ((n1 & mask) ^ (n2 & mask)) ) {
  14.     mask &#62;&#62;= 1;
  15.     mask &= 0x7fffffff;
  16.   }
  17.  
  18.   return mask & (n1 & mask) & (n2 & mask);
  19. }
  20.  
  21. int main(){
  22.   unsigned A = 0xFFFFFFFF;
  23.     unsigned B = 0;
  24.    
  25.   int b;
  26.    
  27.   for(unsigned n=8&#59; n&#60;32&#59; n++){
  28.     B = pow(2,n);
  29.    
  30.     b = checkOverflow(A,B);
  31.       if(b)
  32.        cout&#60;&#60;&#34;SI : &#34;&#60;&#60;n&#60;&#60;endl;
  33.       else
  34.        cout&#60;&#60;&#34;NO : &#34;&#60;&#60;n&#60;&#60;endl;
  35.   }
  36.     cin.get();
  37.  
  38.   A = 0x7fffffff;
  39.   B = 0;
  40.   for(n=0&#59; n&#60;1000&#59; n++){
  41.    
  42.     b = checkOverflow(A,B);
  43.     B++;
  44.       if(b)
  45.        cout&#60;&#60;&#34;SI : &#34;&#60;&#60;n&#60;&#60;endl;
  46.       else
  47.        cout&#60;&#60;&#34;NO : &#34;&#60;&#60;n&#60;&#60;endl;
  48.   }
  49.  
  50.   return 1;
  51. }
  52.  
  53.  


sés Escrito el 23/03/2005, 03:38 PM
Código: Text
  1.  
  2. int checkOverflow( unsigned n1, unsigned n2 )
  3. {
  4.   int mask = 0x80;
  5.  
  6.   while( mask & ((n1 & mask) ^ (n2 & mask)) ) {
  7.     mask &#62;&#62;= 1;
  8.     mask &= 0x7fffffff;
  9.   }
  10.  
  11.   return mask & (n1 & mask) & (n2 & mask);
  12. }
  13.  
  14.  

Citar
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.

La función tal como esta en tu mensaje no detecta el desborde en todos los casos y falla al menos en los casos que demuestro en este programa , estoy asumiendo que la función debe retornar verdadero cuando hay desborde como lo dices en el mensaje , para desbordar un entero sin signo de 4 bytes  es necesario un valor mayor a 0xffffffff pero si paso como argumento a la función 0xffffffff y 0x80000000 la función retorna falso ¿quiere decir que no hay overflow al sumar 0xffffffff y 0x80000000 ? el overflow es mas que evidente en este caso y en los casos que prueva el programa y la función dice que no hay overflow ,si le paso a la función 0x7fffffff y 1 por ejemplo la función retorna verdadero ¿ por que? si la suma de 0x7fffffff y 1 para enteros de 4 bytes sin signo no genera un overflow . otra cosa es que la operación mask &= 0x7fffffff no tiene ningún efecto en el valor de mask  porque en la función le asignas a mask 128 (10000000 en binario ) y luego divides entre 2 ( >>1 que es equivalente ) el 128 en algunos casos 7 veces 64 , 32 , 16 , 8 , 4 , 2 , 1  y en ocasiones 8 veces  hasta que el valor de mask es 0 ( la división entera de 1/2 ) el valor 0x7fffffff permanece constante y realizar la operación & entre 0x7fffffff y los números 64 , 32 , 16 , 8 , 4 , 2 , 1 y 0 da como resultado los mismos números .

Citar
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.
   

Bueno si mi programa no es valido porque genera instrucciones  equivalentes a una resta tu programa tampoco seria valido porque la operación >>1 es equivalente a dividir entre 2 no estoy diciendo que genera las mismas instrucciones en ensamblador estoy diciendo que mask >>= 1 es equivalente a mask /=2 ; en el programa que fue enviado antes por nagisa como solución a este reto se uso el operador != y aun así fue considerado como valido .

sés

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Bitwise Operations
« Respuesta #20 en: Sábado 26 de Marzo de 2005, 22:05 »
0
Antes de nada, corregir mi código. Lo pegué mal pporque estuve probando con bytes antes de escribir el mensaje y puse mal la máscara ^_^:
<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->int checkOverflow( unsigned n1, unsigned n2 )
{
  unsigned mask = 0x80000000;
 
  while( mask & ((n1 & mask) ^ (n2 & mask)) ) {
    mask >>= 1;
    mask &= 0x7fffffff;
  }
 
  return mask & (n1 & mask) & (n2 & mask);
}<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->

Ahora por partes.

Lo primero es que yo no te he faltado al respeto, lo único que dije es que no tenías educación por dudar de mí nada más entrar en el foro y sin ningún motivo. Cosa que mantengo.

Además veo que sigues llendo en plan prepotente al seguir queriendo salirte con la tuya aun habiendo demostrado que no tienes razón.

El código que has puesto para demostrar que mi código no funciona NO FUNCIONA. Si lo hace es por un fallo del Visual C, porque n en el segundo for no está declarada (la declaras en el primero). También me da algún error en la llamada a pow(), pero eso podría ser cosa del MingW.
Aunque a ti te funcione solo demostraría que el código que pegué mal está... pues eso, mal.


Citar
Bueno si mi programa no es valido porque genera instrucciones  equivalentes a una resta tu programa tampoco seria valido porque la operación >>1 es equivalente a dividir entre 2 no estoy diciendo que genera las mismas instrucciones en ensamblador estoy diciendo que mask >>= 1 es equivalente a mask /=2 ; en el programa que fue enviado antes por nagisa como solución a este reto se uso el operador != y aun así fue considerado como valido .
Esto demuestra que no sabes cómo salirte con la tuya.

1º Un CMP realiza una resta.
2º Un desplazamiento no realiza una división, solo desplaza los bits por mucho que el resultado sea el mismo.
3º Los desplazamientos entran dentro de los operadores permitidos por el reto, los operadores aritméticos no, y eso incluye al CMP.
4º Nagisa usa el != y el == para preguntar si es igual o distinto de CERO. Todos sabemos que eso no necesita hacer una resta. ¿Por qué es así? Es muy fácil...

Deberías entender esto antes de intentar dar lecciones a los demás, no sea que te las den a ti.
Una de dos, o no tienes ni idea o no sabes a que agarrarte para intentar salirte con la tuya. En cualquier caso, allá tú.


Termino pidiendo disculpas al moderador si soy algo borde, pero no aguanto los prepotentes que intentan dar lecciones y menos aun cuando no llevan la razón.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Bitwise Operations
« Respuesta #21 en: Domingo 27 de Marzo de 2005, 16:08 »
0
Si quieren pelear crucen su informacion de messenger  :angry:
Esto no es sitio para eso. :lightsabre:  :kicking:
 :hola:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io