Foros del Web » Compartiendo con la comunidad » Actualidad tecnológica »

Comportamientos de los programas al convertir negativos al sis. binario

Estas en el tema de Comportamientos de los programas al convertir negativos al sis. binario en el foro de Actualidad tecnológica en Foros del Web. Güenas, En realidad este es un tema que viene de http://www.forosdelweb.com/f60/como-...inario-523683/ Pero como ya se desvió mucho del tópico original he decidido separarlo en un ...
  #1 (permalink)  
Antiguo 05/10/2007, 16:57
Avatar de Vanchi
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: Io voy donde vo' vai... Ca'eza
Mensajes: 1.111
Antigüedad: 19 años, 1 mes
Puntos: 138
Comportamientos de los programas al convertir negativos al sis. binario

Güenas,

En realidad este es un tema que viene de http://www.forosdelweb.com/f60/como-...inario-523683/
Pero como ya se desvió mucho del tópico original he decidido separarlo en un nuevo hilo.

Me he quedado atrapado en esto de las diversas formas que tienen los distintos programas de mostrar un cambio de base cuando el número es negativo...

Justamente el propósito de este post es mostrar los distintos comportamientos.

NOTA: En algunos programa no encontré forma automática (no sirve que yo haga una pequeña función) de pasar un número a binario, por lo que pasé a hexadesimal, ya que en teoría, el procedimiento sería el mismo con la única diferencia de la base. Si alguno de Uds. conoce una forma automática, por favor completar la lista.

RESUMAMOS LOS COMPORTAMIENTOS:
(Por supuesto que desconozco el funcionamiento interno... Tan sólo me limito a juzgar los resultados)
[1] Convierte el valor absoluto del número a binario y luego NIEGA la PALABRA.
[2] Convierte el valor absoluto del número a binario e IGNORA el signo.
[3] Provoca error.
[4] Convierte el valor absoluto del número a binario y luego le agrega el signo.

Siéntanse libres de ampliar la lista...

[CALCULADORAS FISICAS]
*Casio fx-570MS
-1
RTA: 11111111111111
COMPORTAMIENTO: [1]


[CALCULADORAS POR SOFTWARE]
*Calculadora de Windows
-1 (en sistema binario)
RTA: 11111111111111
COMPORTAMIENTO: [1]

*kcalc (calculadora de KDE)
-1 (en sistema binario)
RTA: 1
COMPORTAMIENTO: [2]


[PLANILLAS DE CÁLCULO]
*OpenOffice.org Calc (forma 1)
=BASE(-1;2)
RTA: Err:502
COMPORTAMIENTO: [3]

*OpenOffice.org Calc (forma 2)
=DEC2BIN(-1)
RTA: 1111111111111
COMPORTAMIENTO: [1]

*Excel
=DEC2BIN(-1)
RTA: 1111111111111
COMPORTAMIENTO: [1]


[COMPILADORES C/C++/C#]
*gcc (C)
itoa(decimal,binario,2);
RTA: 11111111111111
COMPORTAMIENTO: [1]

*g++ (C++)
(NOTA: No entontré forma automática de transformar en binario, de modo que lo pasé a hexadesimal)
cout << hex << -1 << endl;
RTA: FFFFFFFFFFF
COMPORTAMIENTO: [1]

*.Net (C#)
(NOTA: No entontré forma automática de transformar en binario, de modo que lo pasé a hexadesimal)
int i=-1;
Console.WriteLine("{0}", i.ToString("X"));
Console.WriteLine(String.Format("{0:X}",i));
RTA: FFFFFFFFFFF
COMPORTAMIENTO: [1]

*Mono (C#)
(NOTA: No entontré forma automática de transformar en binario, de modo que lo pasé a hexadesimal)
int i=-1;
Console.WriteLine("{0}", i.ToString("X"));
Console.WriteLine(String.Format("{0:X}",i));
RTA: FFFFFFFFFFF
COMPORTAMIENTO: [1]



[PROGRAMAS DE MATEMÁTICAS]
*MathCad
(NOTA: En el MathCad que tengo yo (MathCad 7, un tanto viejito) no encontré forma automática de transformar en binario, de modo que lo pasé a hexadesimal)
a:=-1
a=-1h
COMPORTAMIENTO: [4]

*Octave (forma 1)
octave:1> dec2bin(-1)
error: dec2base: can only convert non-negative integers
COMPORTAMIENTO: [3]

*Ocatave (forma 2)
(NOTA: No transformación vía hexadesimal)
octave:2> printf("Nro: %x\n", -1)
Nro: -1
COMPORTAMIENTO: [4]

CONCLUSIÓN:
Respecto a la opción ampliamente más usada [1], veo en wikipedia:
http://en.wikipedia.org/wiki/Binary_numeral_system

En la parte de Subtraction dice:
A - B = A + not B + 1

Tomemos que:
A = 0
B = -Nro (Nro es el número que nosotros queremos escribir como negativo)

Reemplazando queda:
A - B = A + not B + 1
0 - (-Nro) = 0 + not (-Nro) + 1
Nro = not -Nro + 1
Si Nro = -1
-1 = not 1 + 1
Tomemos 4 posiciones, de modo que:
1 = 0001
-1 = 1110

Reemplazando:
-1 = not 1 + 1
-1 = 1110 + 1
-1 = 1111

Saludos
__________________
Según recientes estudios científicos, los 3 más grandes descubrimientos de la humanidad son: El fuego, la rueda y la minifalda.
Yo personalmente no le encuentro mucha utilidad a los 2 primeros.
  #2 (permalink)  
Antiguo 05/10/2007, 20:18
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Comportamientos de los programas al convertir negativos al sis. binario

El manejo de los binarios me queda claro, pero ya que estamos, colaboro

Java:
System.out.println(Integer.toBinaryString(-1));
Resultado: 11111111111111111111111111111111 [1]

PHP:
echo decbin(-1);
Resultado: 11111111111111111111111111111111 [1]

Iba a hacer también Python, pero aparentemente no hay una función hecha para eso...
El caso es que probablemente cualquier lenguaje en el que se haga una conversión directa tenga el comportamiento [1], ya que es el modo "usual" de representar los enteros negativos (usando el 1º bit para el signo)
El motivo por el que algunos programas procesan diferente el número supongo que viene del hecho de que, al menos en el caso de Octave, son programas de cálculo relativamente complejo que hacen procesos "extra" para, por ejemplo, poder mostrar un entero mayor que maxint...

Ahora, lo que sí me deja extrañado es el comportamiento de kcalc...
  #3 (permalink)  
Antiguo 05/10/2007, 21:03
Avatar de SIMPLER  
Fecha de Ingreso: junio-2005
Ubicación: en casa
Mensajes: 225
Antigüedad: 20 años, 8 meses
Puntos: 3
Re: Comportamientos de los programas al convertir negativos al sis. binario

segun recuerdo de las clases de ensamblador y de arquitectura de computadoras, lo que hacia la negaion era la unidad aritmetica logica, con ayuda de una bandera, la cual indicaba como se trabajaba si negativo o no, eso de manera independiente de cada compilador, pero si dependia de la computadora que se tratara por que una x86 a p 4 lo hacia de igual forma pero un mac o aple lo hacia de manera distinta, ahi sino lo aprendi
__________________
en las escuela los maestros sabian que no seria un einstein, pero simpre admiraron de mi que yo formulaba mis propios puntos de vista.
  #4 (permalink)  
Antiguo 06/10/2007, 06:29
Avatar de Vanchi
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: Io voy donde vo' vai... Ca'eza
Mensajes: 1.111
Antigüedad: 19 años, 1 mes
Puntos: 138
Re: Comportamientos de los programas al convertir negativos al sis. binario

Cita:
Iniciado por alvlin Ver Mensaje

Ahora, lo que sí me deja extrañado es el comportamiento de kcalc...
Por lo visto es un bug del kcalc (que en este momento acabo de reportar).

Veamos en detalle lo que pongo y lo que aparece en la calculadora kcalc. (base binaria, pero también pasa lo propio con cualquier base que no sea la decimal)

Pongo "-1"
Aparece "1"
Pongo "-1"
Aparece "10"
Pongo "-1"
Aparece "11"

... mmm... Por más que le digo que RESTE, el programa está empecinado en aumetar en número... parece que kcalc SABE que el número es negativo, aunque no lo muestre como tal.

Probemos ahora que pasa con la suma...

Pongo "+1"
Aparece "10"
Pongo "+1"
Aparece "1"
Pongo "+1"
Aparece "0"
Pongo "+1"
Aparece "1"

Saludos.
__________________
Según recientes estudios científicos, los 3 más grandes descubrimientos de la humanidad son: El fuego, la rueda y la minifalda.
Yo personalmente no le encuentro mucha utilidad a los 2 primeros.
  #5 (permalink)  
Antiguo 09/10/2007, 18:55
Avatar de Rmaster  
Fecha de Ingreso: julio-2005
Ubicación: Lima - Peru
Mensajes: 146
Antigüedad: 20 años, 7 meses
Puntos: 0
Re: Comportamientos de los programas al convertir negativos al sis. binario

cuantas cosas que no entiendo!!!

mejor me dedico a mi diseño grafico no mas
__________________
Hoy dia amaneci pixeleado
QOLQA diseño web personalizado
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas



La zona horaria es GMT -6. Ahora son las 01:31.