OT: Pregunta de C

rodrigo ahumada rodahum1978 en hotmail.com
Mar Nov 23 20:53:08 CLST 2004


>From: Daniel Serpell <daniel_serpell en yahoo.com>
>Reply-To: Discusion de Linux en Castellano <linux en listas.inf.utfsm.cl>
>To: Discusion de Linux en Castellano <linux en listas.inf.utfsm.cl>
>Subject: Re: OT: Pregunta de C
>Date: Tue, 23 Nov 2004 11:07:02 -0300
>
>Hola!
>
>El Mon, Nov 22, 2004 at 11:01:58PM -0300, Horst von Brand escribio:
> > "rodrigo ahumada" <rodahum1978 en hotmail.com> dijo:
> > >
> > > supongo que la parte:
> > > char p[5];
> > > char *hh(i) {
> > > p[4] = 0;
> > > p[3] = h(i&15);
> > > p[2] = h((i>>=4)&15);
> > > p[1] = h((i>>=4)&15);
> > > p[0] = h((i>>=4)&15);
> > > return p;
> >
> > > no sirve en PPC y otros risc por ser big endian (¿tiene alguna ventaja 
>ser
> > > asi?)
> >
> > Gana prrrremio el concurrrrsanteeeee!
> >
> > Exacto, en maquinas big-endian sale al reves (y tampoco funciona en
> > maquinas de 64 bits, porque queda corto ;-).
>
>En realidad, el código en cuestión funciona tanto en big-endian como
>en little-endian, ya que nunca accede a un entero a travez de un
>puntero a otro tipo de dato, ni usa tipos union.
>
>La parte "i&15" entrega siempre los mismos 4 últimos bits de un número,
>ya que es la constante "15" la que cambia de representación en memoria,
>pero en el código es la misma. Idem el resto.
>
>Con respacto a los 64 bits, el código funciona mientras "i" sea menor
>a 2147483648 y mayor o igual a -2147483648. Fuera de ese rango, entrega
>el resultado de "i % 2147483647" en hexadecimal. Y tuve especial cuidado
>en nunca convertir punteros a int para que funcionara :-)

bueno, entonces en un ENIAC no funciona, ni siquiera se compila

_________________________________________________________________
MSN Amor: busca tu ½ naranja http://latam.msn.com/amor/



Más información sobre la lista de distribución Linux