Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: sebastianarroyo en 26 de Septiembre de 2005, 01:20:41 AM

Título: Convertir Numeros Negativos A Positivos
Publicado por: sebastianarroyo en 26 de Septiembre de 2005, 01:20:41 AM
 hola, nesecito convertir numeros enteros negativoas a positivos. o bien que un for valla hacia atras(*). alguien sabe como hacerlo en el lenguaje visual basic??


(*)
For a = 1000 to 0

next a


Sebastian !!

Título: Convertir Numeros Negativos A Positivos
Publicado por: [EX3] en 26 de Septiembre de 2005, 01:32:24 AM
 Un for/next a la inversa. Para ello utilizamos una instruccion adicional al bucle llamada Step que define el valor que se utilizara para actualizar la variable:
For i = 10 To 0 Step -1

Next i

Pasar un numero negativo a positivo:
a = -12

MsgBox Abs(a)

Salu2...
Título: Convertir Numeros Negativos A Positivos
Publicado por: Douch en 26 de Septiembre de 2005, 11:22:28 AM
 ¿Para pasar de negativo a positivo no bastaría con multiplicar por -1?
Título: Convertir Numeros Negativos A Positivos
Publicado por: Topper en 26 de Septiembre de 2005, 12:19:35 PM
 si el número que vas a convertir es positivo no puedes multiplicar por -1
Título: Convertir Numeros Negativos A Positivos
Publicado por: LC0 en 26 de Septiembre de 2005, 01:41:47 PM
 ¿Por qué no calculas el valor absoluto del número negativo, y ya esta?
Título: Convertir Numeros Negativos A Positivos
Publicado por: Douch en 26 de Septiembre de 2005, 01:52:58 PM
 
Cita de: "Topper"si el número que vas a convertir es positivo no puedes multiplicar por -1
touché!!  :D  
Título: Convertir Numeros Negativos A Positivos
Publicado por: [EX3] en 26 de Septiembre de 2005, 02:23:27 PM
 
Cita de: "LC0"¿Por qué no calculas el valor absoluto del número negativo, y ya esta?
Cita de: "[EX3"]Pasar un numero negativo a positivo:
a = -12

MsgBox Abs(a)
Abs() devuelve el valor absoluto de un numero.

Salu2...
Título: Convertir Numeros Negativos A Positivos
Publicado por: zupervaca en 26 de Septiembre de 2005, 04:23:26 PM
 el signo de un numero se guarda en el bit mas alto, no se si en basic se puede tener acceso a bits, pero con poner a 1 este bit ya tienes un numero negativo siempre

saludo
Título: Convertir Numeros Negativos A Positivos
Publicado por: Mars Attacks en 26 de Septiembre de 2005, 06:19:09 PM
 Eso depende de la representación que estés usando (Complemento a 1, complemento a 2, complementos sexys...).

También puedes hacerlo de la forma difícil, con un "if a<0 then b=-1 else b=1; a=a*b;".
Título: Convertir Numeros Negativos A Positivos
Publicado por: CoLSoN2 en 26 de Septiembre de 2005, 06:37:05 PM
Cita de: "Topper"si el número que vas a convertir es positivo no puedes multiplicar por -1
Aún a riesgo de parecer un idiota, porque nadie lo pregunta.. ¿por qué? Supongo que será en caso de que estés usando un tipo de dato "unsigned", pero si es un int normal no creo que tengas problemas..  ¿o es alguna paranoya de Visual Basic?
Título: Convertir Numeros Negativos A Positivos
Publicado por: Mars Attacks en 26 de Septiembre de 2005, 08:00:49 PM
 Porque si es positivo y lo multiplicas por -1, no estás obteniendo su valor absoluto...
(No es que no "puedas", es que si haces eso, no llegas al resultado que quieres ;))
Título: Convertir Numeros Negativos A Positivos
Publicado por: zupervaca en 26 de Septiembre de 2005, 08:05:27 PM
 mars dejate de complementos y hazme caso que en el pc es asi ;)
Título: Convertir Numeros Negativos A Positivos
Publicado por: Anathoni en 26 de Septiembre de 2005, 08:54:14 PM
 Esto de los bits, complementos... me recuerda a la facultad  :ph34r:

Lo de multiplicar por -1 depende si das por supuesto que los únicos números que recibes son negativos. De todas formas y para quitarse de problemas tontos lo mejor es valor absoluto
Título: Convertir Numeros Negativos A Positivos
Publicado por: Pogacha en 26 de Septiembre de 2005, 09:01:28 PM
 zupervaca, lo que dices es falso ...
signed char(11111111b) = -1
signed char(01111111b) = 127
El metodo utilizado para la representación de numeros negativos utilizado en la pc por intel y compania es el complemento a 2, busca info sobre ella.

Y apoyo lo de colson, ya que el se animo a decirlo, el tipo pregunto por convertir negativos a positivos, lo cual se hace multiplicandolos por -1 o simplemente con la reasignacion y uso del operador signo, a = -a sobraba, si la pregunta hubiera sido obtener el valor absoluto era otra cosa...

Saludos.
Título: Convertir Numeros Negativos A Positivos
Publicado por: zupervaca en 26 de Septiembre de 2005, 09:05:55 PM
Cita de: "Pogacha"zupervaca, lo que dices es falso ...
signed char(11111111b) = -1
signed char(01111111b) = 127
El metodo utilizado para la representación de numeros negativos utilizado en la pc por intel y compania es el complemento a 2, busca info sobre ella.

Y apoyo lo de colson, ya que el se animo a decirlo, el tipo pregunto por convertir negativos a positivos, lo cual se hace multiplicandolos por -1 o simplemente con la reasignacion y uso del operador signo, a = -a sobraba, si la pregunta hubiera sido obtener el valor absoluto era otra cosa...

Saludos.
pogacha es que no te enteras de lo que escribo, acabas de poner lo que yo digo y luego dices que lo que pongo es falso, la verdad es que no entiendo a que viene esto, el bit mas alto define el signo del numero, en el ejemplo que has puesto es asi, ¿por que dices que miento? aclarate tio
Título: Convertir Numeros Negativos A Positivos
Publicado por: Zaelsius en 26 de Septiembre de 2005, 09:14:53 PM
 Si no escribís los números en big-endian no os entiendo XD
Título: Convertir Numeros Negativos A Positivos
Publicado por: zupervaca en 26 de Septiembre de 2005, 09:16:39 PM
 ya el mac y el amiga es diferente al pc, pero es que en pc es asi como yo digo, la verdad es que ultimamente la gente postea sin saber nada
Título: Convertir Numeros Negativos A Positivos
Publicado por: Pogacha en 27 de Septiembre de 2005, 12:54:10 AM
 
Citarla verdad es que ultimamente la gente postea sin saber nada

No es necesario subir el tono de esa manera.  :blink: , vamos que todos pateamos para el mismo lado, si me equivoco corregime y te lo agradeceré, la idea no es demostrar conocimiento (por si se malentendio lo que dije) sino ayudar en un foro  :lol:

Que el ultimo bit indica el signo tienes razón, pero no es lo que discuto ...

Citarel signo de un numero se guarda en el bit mas alto, no se si en basic se puede tener acceso a bits, pero con poner a 1 este bit ya tienes un numero negativo siempre

Con poner el ultimo bit a 1 no solucionas el problema.
Hagamos este experimento: (no tengo un compilador aqui para probarlo).

void main()
{
int a = 1;  // esto es 1
int b = -1; // esto es -1

a |= (1<<15); // pongo a 1 el ultimo bit como tu pides ...

if(a == b) printf( "pogacha se equivoco y te pide disculpas");
 else  printf( "Todo bien");
}


Te pido disculpas si malentendi lo que dijiste o me expresé de forma incorrecta.
No tengo la mas minima intención de discutir, lo mas probable es que te halla mal interpretado o te hallas confundido al escribir.

Saludos.
Título: Convertir Numeros Negativos A Positivos
Publicado por: zupervaca en 27 de Septiembre de 2005, 01:16:10 AM
 si lees detenidamente mi frase no digo que con poner a 1 el bit mas alto te de el valor negativo del numero positivo que contenia, digo que si estableces el bit mas alto a 1 el numero que contiene siempre sera negativo, esto lo puse para aclararle que en cualquier caso siempre sucede asi, mientras el bit mas alto sea 1 el numero siempre sera negativo

en efecto esto no es demostrar quien tiene mas conocimientos, pero creo que yo no lo estoy haciendo, ayudo a la persona a idear un sistema optimizado para convertir numeros con o sin signo a positivos, siempre es mas rapido comprobar un bit que si un numero es mayor o menor a cero
Título: Convertir Numeros Negativos A Positivos
Publicado por: Pogacha en 27 de Septiembre de 2005, 01:30:07 AM
 Ok, supongo entonces que te malentendi, lo apropiado hubiera sido pedirte que me aclares lo que escribiste, te pido disculpas, no era mi intención hacerte enojar u ofenderte ni mucho menos.
Saludos.
Título: Convertir Numeros Negativos A Positivos
Publicado por: fiero en 27 de Septiembre de 2005, 01:51:51 AM
Cita de: "zupervaca"si lees detenidamente mi frase no digo que con poner a 1 el bit mas alto te de el valor negativo del numero positivo que contenia, digo que si estableces el bit mas alto a 1 el numero que contiene siempre sera negativo, esto lo puse para aclararle que en cualquier caso siempre sucede asi, mientras el bit mas alto sea 1 el numero siempre sera negativo

en efecto esto no es demostrar quien tiene mas conocimientos, pero creo que yo no lo estoy haciendo, ayudo a la persona a idear un sistema optimizado para convertir numeros con o sin signo a positivos, siempre es mas rapido comprobar un bit que si un numero es mayor o menor a cero
Reconoce que te has equivocado con lo del bit del primer post XD...  Rectificar ahora es lo mismo que si por ejemplo: El tio pregunta como convertir una imagen a jpg y tú le respondes que los bmps son ficheros muy bonitos.

La segunda frase, mentira podrida. El tiempo en comparar si un número es negativo, o si es mayor que otro, es el mismo o menor, que el de ver de qué color es un bit, para lo que habría que hacer una máscara o un desplazamiento. Si no haz la prueba en ensamblador.

fla meando....
Título: Convertir Numeros Negativos A Positivos
Publicado por: _Grey en 27 de Septiembre de 2005, 01:55:35 AM
 MADE IN STRATOS!!!!!


jjajajajajaa!!  :lol:  :lol: no me he podido resistir, pero estas bueltas de turca solo ocurren aqui  :lol:  :lol:  
Título: Convertir Numeros Negativos A Positivos
Publicado por: Ithaqua en 27 de Septiembre de 2005, 02:32:42 AM
Cita de: "zupervaca"mientras el bit mas alto sea 1 el numero siempre sera negativo
Lo que te tratan de decir es que eso no es cierto :)
Título: Convertir Numeros Negativos A Positivos
Publicado por: [EX3] en 27 de Septiembre de 2005, 03:33:14 AM
 
Cita de: "zupervaca"el signo de un numero se guarda en el bit mas alto, no se si en basic se puede tener acceso a bits, pero con poner a 1 este bit ya tienes un numero negativo siempre
Se puede trabajar a nivel de bit en VB pero es algo engorroso y para este caso en concreto tardas menos obteniendo el valor absoluto mediante Abs() que modificando los bits de la variable.

Cita de: "_Grey"MADE IN STRATOS!!!!!


jjajajajajaa!!  :lol:  :lol: no me he podido resistir, pero estas bueltas de turca solo ocurren aqui  :lol:  :lol:
Eso lo hace unico al resto de foros de la red, a veces pienso que esto le da vida al foro xDDD

Salu2...
Título: Convertir Numeros Negativos A Positivos
Publicado por: CoLSoN2 en 27 de Septiembre de 2005, 07:23:01 AM
Cita de: "Mars Attacks"Porque si es positivo y lo multiplicas por -1, no estás obteniendo su valor absoluto...
(No es que no "puedas", es que si haces eso, no llegas al resultado que quieres ;))
Ah, leyendo el título del thread pensaba que buscaba una forma de cambiar de signo. Aún así, este me parece uno de los threads más poco útiles de la historia de Stratos xD
Título: Convertir Numeros Negativos A Positivos
Publicado por: MA]Mestre en 27 de Septiembre de 2005, 10:24:47 AM
Cita de: "zupervaca"digo que si estableces el bit mas alto a 1 el numero que contiene siempre sera negativo, esto lo puse para aclararle que en cualquier caso siempre sucede asi, mientras el bit mas alto sea 1 el numero siempre sera negativo
No siempre es cierto.

Por cierto, creo que es un buen momento para introducir el tema de si el 0 es positivo o negativo. xDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
Título: Convertir Numeros Negativos A Positivos
Publicado por: TheAzazel en 27 de Septiembre de 2005, 11:12:38 AM
 Vaya tela de thread....

como algo tan sencillo como convertir un numero negativo en positivo puede terminar de este modo????


jajaja, yo me parto!  (ole)  
Título: Convertir Numeros Negativos A Positivos
Publicado por: CoLSoN2 en 27 de Septiembre de 2005, 11:29:51 AM
 ¿A qué huele un bit?
Título: Convertir Numeros Negativos A Positivos
Publicado por: tewe76 en 27 de Septiembre de 2005, 12:08:18 PM
 Si es un bit de paridad, huele a hembra, ¿no?

(Puestos a degenerar el hilo :D)
Título: Convertir Numeros Negativos A Positivos
Publicado por: zupervaca en 27 de Septiembre de 2005, 05:12:45 PM
 bueno entonces es falso lo que digo, y voy a rectificar

cuando el bit mas alto esta a 1 no es siempre un numero negativo, ademas si pones siempre a 1 el bit mas alto no siempre es negativo ¿os gusta mas asi la frase?

pd: aunque sea falsa esa afirmacion me da igual con tal de no aguantar a gente que no sabe leer, ya me paso algo parecido con otro usuario que decia que en c-sharp las clases no son objetos y se lo tuve que demostrar dandole un link donde hay un tutorial bastante extenso para aprender c-sharp, me encanta ver que la gente no tiene ni idea de programar, otra cosa, comprobar un bit es muchisimo mas rapido que comprobar contra cero u otro numero por que si no todas las rutinas graficas de la historia han sido un engaño
Título: Convertir Numeros Negativos A Positivos
Publicado por: CoLSoN2 en 27 de Septiembre de 2005, 05:27:06 PM
 @zupervaca: tu frase original
Citarel signo de un numero se guarda en el bit mas alto, no se si en basic se puede tener acceso a bits, pero con poner a 1 este bit ya tienes un numero negativo siempre
Creo que tienes razón, un número con el bit más alto a 1 (teniendo en cuenta la arquitectura que estamos usando) "tendrías uno negativo", pero el ejemplo de Pogacha te quería hacer ver que como Intel utiliza notación complemento a 2 para representarlos, cambiando ese bit obtendrías un número negativo pero también podrías cambiar el valor absoluto del número (en ese caso cambiarías de 127 a -1), por lo que no sirve como mecanismo para cambiar el signo.
Título: Convertir Numeros Negativos A Positivos
Publicado por: zupervaca en 27 de Septiembre de 2005, 05:49:28 PM
Cita de: "zupervaca"
Cita de: "Pogacha"zupervaca, lo que dices es falso ...
signed char(11111111b) = -1
signed char(01111111b) = 127
El metodo utilizado para la representación de numeros negativos utilizado en la pc por intel y compania es el complemento a 2, busca info sobre ella.

Y apoyo lo de colson, ya que el se animo a decirlo, el tipo pregunto por convertir negativos a positivos, lo cual se hace multiplicandolos por -1 o simplemente con la reasignacion y uso del operador signo, a = -a sobraba, si la pregunta hubiera sido obtener el valor absoluto era otra cosa...

Saludos.
pogacha es que no te enteras de lo que escribo, acabas de poner lo que yo digo y luego dices que lo que pongo es falso, la verdad es que no entiendo a que viene esto, el bit mas alto define el signo del numero, en el ejemplo que has puesto es asi, ¿por que dices que miento? aclarate tio
este fue un post de antes de que pogacha pusiera su ejemplo y que nadie posteara nada, esta al pie de la primera pagina de este hilo, si en mi ultimo post estaba dando esquinazo ¿por que digo que pogacha esta diciendo lo mismo que yo y dice que yo miento? muy sencillo pogacha no ha leido bien mi frase o no la ha entendido, esta claro que ultimamente me estoy empezando a enfadar con estas situaciones, ya que la gente lee medio post y postea sin haber pensado lo que ha escrito el otro
Título: Convertir Numeros Negativos A Positivos
Publicado por: Mars Attacks en 27 de Septiembre de 2005, 06:59:09 PM
 Bueno, si la cosa no iba de valores absolutos (que es donde me he enganchado yo en el post, no recuerdo el comienzo) pues tampoco es tan grave la cosa. Eso sí, poner el primer bit de un número a 1 no te asegura que sea negativo. Podrías estar usando un unsigned, con lo cual ese primer bit también forma parte de la mantisa y no del signo.
Claro, que si es un unsigned, no tendría sentido querer cambiarle el signo ^_^

Así que, de momento, tenemos estas afirmaciones que son ciertas de forma absoluta:
-El primer bit de un número sólo indica su signo en el caso de utilizar números enteros.
-Dependiendo de la representación elegida, cambiando sólo el primer bit podemos NO obtener el mismo número cambiado de signo.
-Los bits de paridad huelen a hembra.
Título: Convertir Numeros Negativos A Positivos
Publicado por: fiero en 27 de Septiembre de 2005, 07:35:54 PM
 Otra afirmación correcta:

- En una arquitectura Intel y compatibles, comparar un único bit de un número no es más rápido que comparar todo el número
- Los bits tienen sexo: pueden ser palito o agujerito

XD
Título: Convertir Numeros Negativos A Positivos
Publicado por: zupervaca en 27 de Septiembre de 2005, 08:28:04 PM
 fiero cuantos ciclos tarda un and y un cmp?
Título: Convertir Numeros Negativos A Positivos
Publicado por: Pogacha en 27 de Septiembre de 2005, 09:03:15 PM
 No tiene ningun sentido seguír hablando de esto ... tan solo quiero profundizar mas aun mis disculpas.
Cita de: "zupervaca"el signo de un numero se guarda en el bit mas alto, no se si en basic se puede tener acceso a bits, pero con poner a 1 este bit ya tienes un numero negativo siempre

saludo

Esta frase de zupervaca me confundió ... si tomamos literalmente la frase aquí no hace una afirmación falsa como yo sentencie erroneamente, pero en el contexto de conversión de numeros esta frase no tiene nada que ver ... si bien habia un hilo de conversasión zupervaca armo el suyo (que si un numero es negativo con el ultimo bit) lo cual si me permiten puede confundir a cuaquiera verdad?
Voy tener mas cuidado al leer los post de zupervaca.
Saludos
PD: Errar es humano, hecharle la culpa a otro es mas humano todavia.
Título: Convertir Numeros Negativos A Positivos
Publicado por: fiero en 27 de Septiembre de 2005, 09:30:31 PM
 
Cita de: "zupervaca"fiero cuantos ciclos tarda un and y un cmp?
Formas de detectar un posible numero negativo en un 386:

and numero,0x80000000      7 ciclos

cmp numero,0                       5 ciclos

test numero,0x80000000      5 ciclos


Tambien se podria hacer una rotación y comprobar el carry, pero al igual que el and machacariamos el numero, con lo que habria que copiarlo a un registro y tal. Así que lo más rápido es el cmp y el test, y son igual de rápidos.

un saludo

EDITO: A todo esto zupervaca, espero que no te tomes a mal ninguna contestación mia, que a veces puedo respondermuy burro, pero con todo el cariño  :rolleyes:  
Título: Convertir Numeros Negativos A Positivos
Publicado por: zupervaca en 27 de Septiembre de 2005, 09:54:58 PM
 si esos ciclos son ciertos no me acaba de cuadra el motivo de por que usar operaciones and y or para pintar en vez de usar un simple cmp que es mas rapido
Título: Convertir Numeros Negativos A Positivos
Publicado por: CoLSoN2 en 27 de Septiembre de 2005, 11:04:05 PM
Cita de: "fiero"- Los bits tienen sexo: pueden ser palito o agujerito
Mejor.frase.del.thread
Título: Convertir Numeros Negativos A Positivos
Publicado por: Pogacha en 28 de Septiembre de 2005, 12:55:57 AM
 
Cita de: "zupervaca"si esos ciclos son ciertos no me acaba de cuadra el motivo de por que usar operaciones and y or para pintar en vez de usar un simple cmp que es mas rapido
Por las dudas aclaro que cmp compara, no modifica nada, and y or si hacen operaciónes que modifican, pero es comun usar or y and para hacer saltar las banderas y comparar si el numero es 0, no obstante no se a que te refieres con pintar con cmp, ¿para hacer un alpha masking?.


CitarQUOTE (fiero @ 27/09/05, 17:35 )
- Los bits tienen sexo: pueden ser palito o agujerito 

Mejor.frase.del.thread
Totalmente cierto.

CitarFormas de detectar un posible numero negativo en un 386:
Por cierto  fiero ... en un pentium es todo lo mismo verdad?

Saludos.
Título: Convertir Numeros Negativos A Positivos
Publicado por: zupervaca en 28 de Septiembre de 2005, 01:17:24 AM
 cuando digo pintar con cmp me refiero a usar el cmp para saber si es el color de mascara o no
Título: Convertir Numeros Negativos A Positivos
Publicado por: Pogacha en 28 de Septiembre de 2005, 01:39:49 AM
Cita de: "zupervaca"cuando digo pintar con cmp me refiero a usar el cmp para saber si es el color de mascara o no
Eso supuse pero parece que tengo problemas para entenderte  :lol:  
Título: Convertir Numeros Negativos A Positivos
Publicado por: zupervaca en 28 de Septiembre de 2005, 02:01:19 AM
 bueno puedo que el problema sea mio tambien que no se que explicarme
Título: Convertir Numeros Negativos A Positivos
Publicado por: fiero en 28 de Septiembre de 2005, 10:19:40 AM
Cita de: "Pogacha"
CitarFormas de detectar un posible numero negativo en un 386:
Por cierto  fiero ... en un pentium es todo lo mismo verdad?
Sí, es lo mismo, aunque yo siempre todo como referencia las instrucciones del 386. En los ordenadores modernos todas las instrucciones han reducido el número de ciclos y además se ejecutan varias instrucciones a la vez, así que hoy en dia no hay forma humana de saber cuanto dura una instrucción sacada de contexto.

un saludo
Título: Convertir Numeros Negativos A Positivos
Publicado por: Ray en 28 de Septiembre de 2005, 07:40:10 PM
 Le vais a volver loco al chaval al final.  (uoh)  (nooo)  O_O  :blink:

Solo haría lo que dice zupervaca si estoy seguro de que siempre voy a trabajar con el mismo tipo de dato, en este caso double word con signo.

pero por razones prácticas mejor me quedo con esto:

if a<0 then a=-a