-- Who’s got the sweetest disposition? One guess, that’s who? Who’d never, ever start an argument? Who never shows a bit of temperament? Who's never wrong but always right? Who'd never dream of starting a fight? Who get stuck with all the bad luck?
> -- > Who’s got the sweetest disposition? > One guess, that’s who? > Who’d never, ever start an argument? > Who never shows a bit of temperament? > Who's never wrong but always right? > Who'd never dream of starting a fight? > Who get stuck with all the bad luck?
-- Who’s got the sweetest disposition? One guess, that’s who? Who’d never, ever start an argument? Who never shows a bit of temperament? Who's never wrong but always right? Who'd never dream of starting a fight? Who get stuck with all the bad luck?
> -- > Who’s got the sweetest disposition? > One guess, that’s who? > Who’d never, ever start an argument? > Who never shows a bit of temperament? > Who's never wrong but always right? > Who'd never dream of starting a fight? > Who get stuck with all the bad luck?
> -- > ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido > este mesaje por error. > En caso de duda visita "http://groups.google.com/group/cppba"
> > -- > > Who’s got the sweetest disposition? > > One guess, that’s who? > > Who’d never, ever start an argument? > > Who never shows a bit of temperament? > > Who's never wrong but always right? > > Who'd never dream of starting a fight? > > Who get stuck with all the bad luck?
> > -- > > ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido > > este mesaje por error. > > En caso de duda visita "http://groups.google.com/group/cppba"
> -- > ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido > este mesaje por error. > En caso de duda visita "http://groups.google.com/group/cppba"
-- Who’s got the sweetest disposition? One guess, that’s who? Who’d never, ever start an argument? Who never shows a bit of temperament? Who's never wrong but always right? Who'd never dream of starting a fight? Who get stuck with all the bad luck?
>> > -- >> > Who’s got the sweetest disposition? >> > One guess, that’s who? >> > Who’d never, ever start an argument? >> > Who never shows a bit of temperament? >> > Who's never wrong but always right? >> > Who'd never dream of starting a fight? >> > Who get stuck with all the bad luck?
>> > -- >> > ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >> recibido >> > este mesaje por error. >> > En caso de duda visita "http://groups.google.com/group/cppba"
>> -- >> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido >> este mesaje por error. >> En caso de duda visita "http://groups.google.com/group/cppba"
> -- > Who’s got the sweetest disposition? > One guess, that’s who? > Who’d never, ever start an argument? > Who never shows a bit of temperament? > Who's never wrong but always right? > Who'd never dream of starting a fight? > Who get stuck with all the bad luck?
> -- > ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido > este mesaje por error. > En caso de duda visita "http://groups.google.com/group/cppba"
ramiro.del.co...@gmail.com> wrote: > Puede que sea por si char es signed, 0xFF deberia ser -1, pero como 0xFF > es int, lo usa como 255 y nunca entraria al if? Muy frio?
> On Thu, Feb 23, 2012 at 11:01 AM, Daniel Gutson <danielgut...@gmail.com>wrote:
>> y un bug real que le ocurrió a un amigo y me preguntó hoy porque no >> entendía qué pasaba :)
>> On Thu, Feb 23, 2012 at 3:59 PM, Fernando Cacciola < >> fernando.cacci...@gmail.com> wrote:
>>> Uhhh que malo que sos....
>>> Esto es MUUUY sutil
>>> On Thu, Feb 23, 2012 at 3:54 PM, Daniel Gutson <danielgut...@gmail.com> >>> wrote: >>> > char c = f();
>>> > -- >>> > Who’s got the sweetest disposition? >>> > One guess, that’s who? >>> > Who’d never, ever start an argument? >>> > Who never shows a bit of temperament? >>> > Who's never wrong but always right? >>> > Who'd never dream of starting a fight? >>> > Who get stuck with all the bad luck?
>>> > -- >>> > ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>> recibido >>> > este mesaje por error. >>> > En caso de duda visita "http://groups.google.com/group/cppba"
>>> -- >>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>> recibido este mesaje por error. >>> En caso de duda visita "http://groups.google.com/group/cppba"
>> -- >> Who’s got the sweetest disposition? >> One guess, that’s who? >> Who’d never, ever start an argument? >> Who never shows a bit of temperament? >> Who's never wrong but always right? >> Who'd never dream of starting a fight? >> Who get stuck with all the bad luck?
>> -- >> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido >> este mesaje por error. >> En caso de duda visita "http://groups.google.com/group/cppba"
> -- > ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido > este mesaje por error. > En caso de duda visita "http://groups.google.com/group/cppba"
-- Who’s got the sweetest disposition? One guess, that’s who? Who’d never, ever start an argument? Who never shows a bit of temperament? Who's never wrong but always right? Who'd never dream of starting a fight? Who get stuck with all the bad luck?
>>>> > -- >>>> > Who’s got the sweetest disposition? >>>> > One guess, that’s who? >>>> > Who’d never, ever start an argument? >>>> > Who never shows a bit of temperament? >>>> > Who's never wrong but always right? >>>> > Who'd never dream of starting a fight? >>>> > Who get stuck with all the bad luck?
>>>> > -- >>>> > ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>>> recibido >>>> > este mesaje por error. >>>> > En caso de duda visita "http://groups.google.com/group/cppba"
>>>> -- >>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>>> recibido este mesaje por error. >>>> En caso de duda visita "http://groups.google.com/group/cppba"
>>> -- >>> Who’s got the sweetest disposition? >>> One guess, that’s who? >>> Who’d never, ever start an argument? >>> Who never shows a bit of temperament? >>> Who's never wrong but always right? >>> Who'd never dream of starting a fight? >>> Who get stuck with all the bad luck?
>>> -- >>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>> recibido este mesaje por error. >>> En caso de duda visita "http://groups.google.com/group/cppba"
>> -- >> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido >> este mesaje por error. >> En caso de duda visita "http://groups.google.com/group/cppba"
> -- > Who’s got the sweetest disposition? > One guess, that’s who? > Who’d never, ever start an argument? > Who never shows a bit of temperament? > Who's never wrong but always right? > Who'd never dream of starting a fight? > Who get stuck with all the bad luck?
-- Who’s got the sweetest disposition? One guess, that’s who? Who’d never, ever start an argument? Who never shows a bit of temperament? Who's never wrong but always right? Who'd never dream of starting a fight? Who get stuck with all the bad luck?
>>>>> > -- >>>>> > Who’s got the sweetest disposition? >>>>> > One guess, that’s who? >>>>> > Who’d never, ever start an argument? >>>>> > Who never shows a bit of temperament? >>>>> > Who's never wrong but always right? >>>>> > Who'd never dream of starting a fight? >>>>> > Who get stuck with all the bad luck?
>>>>> > -- >>>>> > ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>>>> recibido >>>>> > este mesaje por error. >>>>> > En caso de duda visita "http://groups.google.com/group/cppba"
>>>>> -- >>>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>>>> recibido este mesaje por error. >>>>> En caso de duda visita "http://groups.google.com/group/cppba"
>>>> -- >>>> Who’s got the sweetest disposition? >>>> One guess, that’s who? >>>> Who’d never, ever start an argument? >>>> Who never shows a bit of temperament? >>>> Who's never wrong but always right? >>>> Who'd never dream of starting a fight? >>>> Who get stuck with all the bad luck?
>>>> -- >>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>>> recibido este mesaje por error. >>>> En caso de duda visita "http://groups.google.com/group/cppba"
>>> -- >>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>> recibido este mesaje por error. >>> En caso de duda visita "http://groups.google.com/group/cppba"
>> -- >> Who’s got the sweetest disposition? >> One guess, that’s who? >> Who’d never, ever start an argument? >> Who never shows a bit of temperament? >> Who's never wrong but always right? >> Who'd never dream of starting a fight? >> Who get stuck with all the bad luck?
> -- > Who’s got the sweetest disposition? > One guess, that’s who? > Who’d never, ever start an argument? > Who never shows a bit of temperament? > Who's never wrong but always right? > Who'd never dream of starting a fight? > Who get stuck with all the bad luck?
> -- > ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido > este mesaje por error. > En caso de duda visita "http://groups.google.com/group/cppba"
>>>>>> > -- >>>>>> > Who’s got the sweetest disposition? >>>>>> > One guess, that’s who? >>>>>> > Who’d never, ever start an argument? >>>>>> > Who never shows a bit of temperament? >>>>>> > Who's never wrong but always right? >>>>>> > Who'd never dream of starting a fight? >>>>>> > Who get stuck with all the bad luck?
>>>>>> > -- >>>>>> > ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>>>>> recibido >>>>>> > este mesaje por error. >>>>>> > En caso de duda visita "http://groups.google.com/group/cppba"
>>>>>> -- >>>>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>>>>> recibido este mesaje por error. >>>>>> En caso de duda visita "http://groups.google.com/group/cppba"
>>>>> -- >>>>> Who’s got the sweetest disposition? >>>>> One guess, that’s who? >>>>> Who’d never, ever start an argument? >>>>> Who never shows a bit of temperament? >>>>> Who's never wrong but always right? >>>>> Who'd never dream of starting a fight? >>>>> Who get stuck with all the bad luck?
>>>>> -- >>>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>>>> recibido este mesaje por error. >>>>> En caso de duda visita "http://groups.google.com/group/cppba"
>>>> -- >>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>>> recibido este mesaje por error. >>>> En caso de duda visita "http://groups.google.com/group/cppba"
>>> -- >>> Who’s got the sweetest disposition? >>> One guess, that’s who? >>> Who’d never, ever start an argument? >>> Who never shows a bit of temperament? >>> Who's never wrong but always right? >>> Who'd never dream of starting a fight? >>> Who get stuck with all the bad luck?
>> -- >> Who’s got the sweetest disposition? >> One guess, that’s who? >> Who’d never, ever start an argument? >> Who never shows a bit of temperament? >> Who's never wrong but always right? >> Who'd never dream of starting a fight? >> Who get stuck with all the bad luck?
>> -- >> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido >> este mesaje por error. >> En caso de duda visita "http://groups.google.com/group/cppba"
> -- > ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido > este mesaje por error. > En caso de duda visita "http://groups.google.com/group/cppba"
-- Who’s got the sweetest disposition? One guess, that’s who? Who’d never, ever start an argument? Who never shows a bit of temperament? Who's never wrong but always right? Who'd never dream of starting a fight? Who get stuck with all the bad luck?
>>>>>>> > -- >>>>>>> > Who’s got the sweetest disposition? >>>>>>> > One guess, that’s who? >>>>>>> > Who’d never, ever start an argument? >>>>>>> > Who never shows a bit of temperament? >>>>>>> > Who's never wrong but always right? >>>>>>> > Who'd never dream of starting a fight? >>>>>>> > Who get stuck with all the bad luck?
>>>>>>> > -- >>>>>>> > ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>>>>>> recibido >>>>>>> > este mesaje por error. >>>>>>> > En caso de duda visita "http://groups.google.com/group/cppba"
>>>>>>> -- >>>>>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>>>>>> recibido este mesaje por error. >>>>>>> En caso de duda visita "http://groups.google.com/group/cppba"
>>>>>> -- >>>>>> Who’s got the sweetest disposition? >>>>>> One guess, that’s who? >>>>>> Who’d never, ever start an argument? >>>>>> Who never shows a bit of temperament? >>>>>> Who's never wrong but always right? >>>>>> Who'd never dream of starting a fight? >>>>>> Who get stuck with all the bad luck?
>>>>>> -- >>>>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>>>>> recibido este mesaje por error. >>>>>> En caso de duda visita "http://groups.google.com/group/cppba"
>>>>> -- >>>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>>>> recibido este mesaje por error. >>>>> En caso de duda visita "http://groups.google.com/group/cppba"
>>>> -- >>>> Who’s got the sweetest disposition? >>>> One guess, that’s who? >>>> Who’d never, ever start an argument? >>>> Who never shows a bit of temperament? >>>> Who's never wrong but always right? >>>> Who'd never dream of starting a fight? >>>> Who get stuck with all the bad luck?
>>> -- >>> Who’s got the sweetest disposition? >>> One guess, that’s who? >>> Who’d never, ever start an argument? >>> Who never shows a bit of temperament? >>> Who's never wrong but always right? >>> Who'd never dream of starting a fight? >>> Who get stuck with all the bad luck?
>>> -- >>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>> recibido este mesaje por error. >>> En caso de duda visita "http://groups.google.com/group/cppba"
>> -- >> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido >> este mesaje por error. >> En caso de duda visita "http://groups.google.com/group/cppba"
> -- > Who’s got the sweetest disposition? > One guess, that’s who? > Who’d never, ever start an argument? > Who never shows a bit of temperament? > Who's never wrong but always right? > Who'd never dream of starting a fight? > Who get stuck with all the bad luck?
> -- > ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido > este mesaje por error. > En caso de duda visita "http://groups.google.com/group/cppba"
>>>>>>>> > -- >>>>>>>> > Who’s got the sweetest disposition? >>>>>>>> > One guess, that’s who? >>>>>>>> > Who’d never, ever start an argument? >>>>>>>> > Who never shows a bit of temperament? >>>>>>>> > Who's never wrong but always right? >>>>>>>> > Who'd never dream of starting a fight? >>>>>>>> > Who get stuck with all the bad luck?
>>>>>>>> > -- >>>>>>>> > ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>>>>>>> recibido >>>>>>>> > este mesaje por error. >>>>>>>> > En caso de duda visita "http://groups.google.com/group/cppba"
>>>>>>>> -- >>>>>>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>>>>>>> recibido este mesaje por error. >>>>>>>> En caso de duda visita "http://groups.google.com/group/cppba"
>>>>>>> -- >>>>>>> Who’s got the sweetest disposition? >>>>>>> One guess, that’s who? >>>>>>> Who’d never, ever start an argument? >>>>>>> Who never shows a bit of temperament? >>>>>>> Who's never wrong but always right? >>>>>>> Who'd never dream of starting a fight? >>>>>>> Who get stuck with all the bad luck?
>>>>>>> -- >>>>>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>>>>>> recibido este mesaje por error. >>>>>>> En caso de duda visita "http://groups.google.com/group/cppba"
>>>>>> -- >>>>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>>>>> recibido este mesaje por error. >>>>>> En caso de duda visita "http://groups.google.com/group/cppba"
>>>>> -- >>>>> Who’s got the sweetest disposition? >>>>> One guess, that’s who? >>>>> Who’d never, ever start an argument? >>>>> Who never shows a bit of temperament? >>>>> Who's never wrong but always right? >>>>> Who'd never dream of starting a fight? >>>>> Who get stuck with all the bad luck?
>>>> -- >>>> Who’s got the sweetest disposition? >>>> One guess, that’s who? >>>> Who’d never, ever start an argument? >>>> Who never shows a bit of temperament? >>>> Who's never wrong but always right? >>>> Who'd never dream of starting a fight? >>>> Who get stuck with all the bad luck?
>>>> -- >>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>>> recibido este mesaje por error. >>>> En caso de duda visita "http://groups.google.com/group/cppba"
>>> -- >>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has >>> recibido este mesaje por error. >>> En caso de duda visita "http://groups.google.com/group/cppba"
>> -- >> Who’s got the sweetest disposition? >> One guess, that’s who? >> Who’d never, ever start an argument? >> Who never shows a bit of temperament? >> Who's never wrong but always right? >> Who'd never dream of starting a fight? >> Who get stuck with all the bad luck?
>> -- >> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido >> este mesaje por error. >> En caso de duda visita "http://groups.google.com/group/cppba"
> -- > ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido > este mesaje por error. > En caso de duda visita "http://groups.google.com/group/cppba"
-- Who’s got the sweetest disposition? One guess, that’s who? Who’d never, ever start an argument? Who never shows a bit of temperament? Who's never wrong but always right? Who'd never dream of starting a fight? Who get stuck with all the bad luck?
> >>>>>>>> > --
> >>>>>>>> > Who’s got the sweetest disposition?
> >>>>>>>> > One guess, that’s who?
> >>>>>>>> > Who’d never, ever start an argument?
> >>>>>>>> > Who never shows a bit of temperament?
> >>>>>>>> > Who's never wrong but always right?
> >>>>>>>> > Who'd never dream of starting a fight?
> >>>>>>>> > Who get stuck with all the bad luck?
> >>>>>>>> > --
> >>>>>>>> > ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has
> >>>>>>>> recibido
> >>>>>>>> > este mesaje por error.
> >>>>>>>> > En caso de duda visita "http://groups.google.com/group/cppba"
> >>>>>>>> --
> >>>>>>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has
> >>>>>>>> recibido este mesaje por error.
> >>>>>>>> En caso de duda visita "http://groups.google.com/group/cppba"
> >>>>>>> --
> >>>>>>> Who’s got the sweetest disposition?
> >>>>>>> One guess, that’s who?
> >>>>>>> Who’d never, ever start an argument?
> >>>>>>> Who never shows a bit of temperament?
> >>>>>>> Who's never wrong but always right?
> >>>>>>> Who'd never dream of starting a fight?
> >>>>>>> Who get stuck with all the bad luck?
> >>>>>>> --
> >>>>>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has
> >>>>>>> recibido este mesaje por error.
> >>>>>>> En caso de duda visita "http://groups.google.com/group/cppba"
> >>>>>> --
> >>>>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has
> >>>>>> recibido este mesaje por error.
> >>>>>> En caso de duda visita "http://groups.google.com/group/cppba"
> >>>>> --
> >>>>> Who’s got the sweetest disposition?
> >>>>> One guess, that’s who?
> >>>>> Who’d never, ever start an argument?
> >>>>> Who never shows a bit of temperament?
> >>>>> Who's never wrong but always right?
> >>>>> Who'd never dream of starting a fight?
> >>>>> Who get stuck with all the bad luck?
> >>>> --
> >>>> Who’s got the sweetest disposition?
> >>>> One guess, that’s who?
> >>>> Who’d never, ever start an argument?
> >>>> Who never shows a bit of temperament?
> >>>> Who's never wrong but always right?
> >>>> Who'd never dream of starting a fight?
> >>>> Who get stuck with all the bad luck?
> >>>> --
> >>>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has
> >>>> recibido este mesaje por error.
> >>>> En caso de duda visita "http://groups.google.com/group/cppba"
> >>> --
> >>> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has
> >>> recibido este mesaje por error.
> >>> En caso de duda visita "http://groups.google.com/group/cppba"
> >> --
> >> Who’s got the sweetest disposition?
> >> One guess, that’s who?
> >> Who’d never, ever start an argument?
> >> Who never shows a bit of temperament?
> >> Who's never wrong but always right?
> >> Who'd never dream of starting a fight?
> >> Who get stuck with all the bad luck?
> >> --
> >> ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido
> >> este mesaje por error.
> >> En caso de duda visita "http://groups.google.com/group/cppba"
> > --
> > ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido
> > este mesaje por error.
> > En caso de duda visita "http://groups.google.com/group/cppba"
> --
> Who’s got the sweetest disposition?
> One guess, that’s who?
> Who’d never, ever start an argument?
> Who never shows a bit of temperament?
> Who's never wrong but always right?
> Who'd never dream of starting a fight?
> Who get stuck with all the bad luck?
Es corecto que haga eso el compilador haga eso ya que la comparación la tiene que hacer entre enteros con signo. El literal 0xff es un entero con signo y por lo tanto tiene que primero promover a c a un entero con signo y luego comparar.
Para solucionar esta tema de manera portable debemos hacer que la constante sea un literal de tipo char, es decir
________________________________ From: Eduardo <abdula...@gmail.com> To: CyC++ Buenos Aires <cppba@googlegroups.com> Sent: Thursday, February 23, 2012 11:05 PM Subject: [cppba] Re: hola tanto tiempo
Permiso caballeros. Jamás escribo pero siempre los leo.
En problemas de ese estilo siempre me saca del agua el código assembler generado.
En este caso es:
; if ( c == 0xff ) ; ?live1@32: ; EAX = c movsx eax,al cmp eax,255 jne short @2
Donde se vé por qué vamos muertos. Al char lo pasa a 32bit extendiendo el signo y después compara con 255.
O bien c se define como unsigned char o hacemos if ( c == -1 )
-- ¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error. En caso de duda visita "http://groups.google.com/group/cppba"
\xhh
con lo que la línea de código quedaría:
if ( c == \xff )
Una aclaración adicional:
char, unsigned char y signed char son 3 tipos diferentes. Durante la conversión de char a int el compilador es libre de elegir si lo considera con signo o no, por lo tanto comparar contra -1 no es portable.
Todavía quedan 'huecos' por resolver aún en esta versión.
Fijate la devolución a Eduardo.
> Una aclaración adicional:
> char, unsigned char y signed char son 3 tipos diferentes. Durante > la conversión de char a int el compilador es libre de elegir si lo considera > con signo o no, por lo tanto comparar contra -1 no es portable.
Ahí nos vamos acercando. Efectivamente el -1 no es portable si convertimos el char a int.
Por otro lado, técnicamente, la dicotomía existe aún mas allá de la conversión a entero. Es decir:
On Feb 23, 11:31 pm, Fernando Cacciola <fernando.cacci...@gmail.com>
wrote:
> Por otro lado, tu version es equivalente a esto:
> (2)
> char c = -1 ;
> if ( (int)(c) == -1 )
> Seguro que anda?
Hola Fernando!
Eso anda según mi entender (y mi método de control :-) ), aunque
debido al (int) tiene que hacer una conversión antes de comparar. De
la otra forma compara directamente dos registros de 8bits.
> Eso anda según mi entender (y mi método de control :-) ),
OK, una pista entonces.
NO lo prueben porque les va a andar.. y sin embargo eso no quiere decir nada :)
P.S.:
Otra pista... C y C++, a diferencia de muchos otros lenguajes, está pensado para permitir al programador escribir un fuente y correr el programa resultante en cualquier cosa capaz de ser programada, y entonces, esta DEFINIDO de un modo que haga eso posible. Decimos entonces que la *especificación* del lenguaje (según un determinado estandard) dice que las cosas son de uno y/o otro modo, y es eso lo que debe ser considerado para decidir si el programa que escribimos hace *garantizadamente* esto o aquello.
Preguntas:
¿cuál es la razón o ventaja que tiene permitir que char pueda ser
interpretado como signed o como unsigned?
¿Por qué no exigir que el programador especifique el signo?
¿pasa lo mismo con integer, signed integer y unsigned integer?
Siguiendo con este razonamiento creería que (signed char)(-1) == 0xFF
sería falso, ya que 0xFF es un entero positivo (¿las constantes por
default son enteros con signo, no?) y se castea el (signed char) -1 a
signed integer, manteniendo el valor (-1).
On Feb 24, 1:07 am, Fernando Cacciola <fernando.cacci...@gmail.com>
wrote:
> Preguntas: > ¿cuál es la razón o ventaja que tiene permitir que char pueda ser > interpretado como signed o como unsigned?
Buena pregunta:
signed/unsigned char son tipos enteros que sirven para representar números enteros con o sin signo, mientras que char a secas, aunque puede ser usado del mismo modo (tal como ocurre en la práctica), existe en sí mismo como el tipo de dato que representa de un byte.
Es decir, un bloque de memoria, es decir el *storage* que le corresponde a un *objeto* (o lvalue en C), está definido como una secuencia de chars (y no como una secuencia de signed char o unsigned char). Resulta entonces que necesitamos del tipo char como un tipo diferente a signed/unsigned char para referir a bloques de memoria.
Ahora bien, si tenemos que tener esos tres tipos, y char tiene que ser el que corresponde a un byte, porqué especificar si tiene que ser con o sin signo en lugar de dejar a la implementación (o sea el compilador) decidirlo?
Por otro lado, uno podria pensar que char podría no tener nada que ver con signed or unsigned char y tener en cambio su propia definicion independiente (que de todos modos no especificaria si puede o no representar números negativos (*) para no forzar al compilador innecesariamete) .Net por ejemplo distingue explicitamente uno de otros:
Aunque hace explícito el tema del signo: byte es unsigned mientras que sbyte es signed (en mi opninión esto es un error, pero...)
> ¿Por qué no exigir que el programador especifique el signo?
Acá está el quiz de la cuestón:
el verdadero propósito de char es,k o debería ser en mi opinión, representar un byte. Y la arquitectura define el byte como se le da la gana, incluso en cuanto a la cantidad de bits (sizeof(char)==8 no es siempre cierto!)
Ahora, si el programador quiere representar números pequeños, debe, o puede al menos, usar signed char or unsigned char, con lo cual está especificando el signo como decis.
Que en la práctica se abuse de char para, por ejemplo, representar caracteres en un archivo o string, es posiblemente un accidente cultural (tal vez en K&R no había todavía signed char/unsigned char? sería interesante investigar esto)
> ¿pasa lo mismo con integer, signed integer y unsigned integer?
NO
Para cualquier otro tipo de dato entero, signed está implicito:
typeof(signed int)==typeof(int), lo mismo para short, long, etc...
> Siguiendo con este razonamiento creería que (signed char)(-1) == 0xFF > sería falso, ya que 0xFF es un entero positivo > (¿las constantes por > default son enteros con signo, no?)
Los *literales* (no constantes) son de un determinado tipo que depende del la forma del literal, y sí, para el caso de "solo un número" (mas allá de que sea decimal o hexdecimal), el tipo es signed int, que es lo mismo que int.
1u por otro lado es un unsgined int, etc..
> y se castea el (signed char) -1 a > signed integer, manteniendo el valor (-1).
Hmm, en realidad me equivoqué y quise preguntar por:
(unsigned char)(-1) == 0xFF
Eso es o no cierto?
[todavía hay un tema más que del cual no se habló para nada todavía]