Comunidad Gambas-es
Una regla que no conozco - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: General (https://gambas-es.org/forum-4.html)
+--- Tema: Una regla que no conozco (/thread-835.html)



Una regla que no conozco - alessandri - 01-03-2022

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?


RE: Una regla que no conosco - Grandamakulo - 01-03-2022

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.


RE: Una regla que no conozco - alessandri - 02-03-2022

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.


RE: Una regla que no conozco - Grandamakulo - 02-03-2022

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().