• Viernes 15 de Noviembre de 2024, 09:17

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - sés

Páginas: [1]
1
C/C++ / Re: Conversiones
« en: Viernes 1 de Abril de 2005, 12:01 »
Código: Text
  1. #ifdef CODIF_FAST
  2.     static char _cHex[16] = {
  3.         '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  4.         'A', 'B', 'C', 'D', 'E', 'F'
  5.     };
  6.     #define HexToAsc( d ) _cHex[d]   // Hexadecimal To Ascii
  7.  
  8.     static BYTE _dHex[23] = {
  9.         0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, // '0'-'9'  (48-57)
  10.         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,                   // KKKKKKK  (58-64)
  11.         0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f                          // 'A'-'F'  (65-70)
  12.     };
  13.     #define AscToHex( c ) ((int)_dHex[(c)-'0'])  // Ascii To Hexadecimal
  14. #else
  15.     #define HexToAsc( d ) ((char)(((d)<10) ? ('0'+(d)) : ('A'+(d)-10)))
  16.     #define AscToHex( c ) ((int)(((c)<'A') ? ((c)-'0') : ((c)-'A'+10)))
  17. #endif  // FAST
  18.  

2
Retos / Re: Bitwise Operations
« en: Sábado 26 de Marzo de 2005, 22:05 »
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.

3
Retos / Re: Bitwise Operations
« en: Viernes 25 de Marzo de 2005, 16:14 »
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)...

4
Retos / Re: Bitwise Operations
« en: Viernes 25 de Marzo de 2005, 09:35 »
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?

5
Retos / Re: Bitwise Operations
« en: Jueves 24 de Marzo de 2005, 09:25 »
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.

6
Retos / Re: Bitwise Operations
« en: Miércoles 23 de Marzo de 2005, 15:38 »
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).

Páginas: [1]