Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Una regla que no conozco
#1

Hola amigos.

¿alguien me puede explicar por qué da ese resultado?

dim a as byte =14
dim b as byte = 19

print (a-b)

251  Huh

¿qué regla sigue para conseguir ese resultado?
    ¡Gracias!
#2

El formato byte no tiene números negativos, sus valores van de 0 a 255. Por tal motivo, al calcular un resultado que dé un número por debajo de cero, lo toma como complementario a 255, es decir, en tu ejemplo baja cinco desde cero —incluyéndolo—, o sea, 0, -1 eq 255, -2 eq 254, -3 eq 253, -4 eq 252, -5 eq 251.
Aunque me he explicado fatal, esto se ve fenomenal con el formatos «entero» que sí incluye negativos, pero viéndolos en binario, ya que el dígito más significativo se toma como signo.

En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
[-] Los siguientes 2 usuarios dicen gracias a Grandamakulo por este post:
  • jguardon, Shordi
    ¡Gracias!
#3

Gracias hermano, pero y esto?

dim a as byte =14
dim b as byte = 19
dim c as float

c=a-b
print © 'Esto da 251

Entonces hay que añadir: "No se puede utilizar variables Byte para hacer restas en las que el sustraendo es mayor al minuendo,
aunque el resultado se cargue a una variable Float o Intiger"

saludos.
    ¡Gracias!
#4

Claro, eso es normal: la operación la estás haciendo en tipo «byte» y luego cargas el resultado en un «float». Para que te maneje los negativos debes cargar primero los datos en tipos que los acepten o emplear funciones de conversión, como CFloat().

En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
    ¡Gracias!


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)