Suma de angulos. Typedef

Iniciado por Bob1098, 31 Agosto 2016, 20:22 PM

0 Miembros y 1 Visitante están viendo este tema.

Bob1098

Estoy implementando un tipo que almacene numeros entre 0 y 255, es decir de 1 byte de tamaño.

Para ello he escrito este codigo en un ejemplo con angulos, pero al ser realmente tipo char obtengo resultados como caracteres, y si hago un casting a int en el cout obtengo resultados numericos pero sin sentido:

Código (cpp) [Seleccionar]

#include <iostream>
#include <cmath>

using namespace std;

typedef char byte;

struct stAngulo {
short grados;
byte minutos;
byte segundos;
};

stAngulo operator+(stAngulo a1, stAngulo a2); // a1+a2
stAngulo operator-(stAngulo a1, stAngulo a2); // a1-a2

int main(int argc, char *argv[]) {
stAngulo angulo1 = { 23, 15, 20 }, angulo2 = { 2, 35, 29 };
stAngulo suma = angulo1 + angulo2;

cout << "Grados: " << suma.grados << "\n\nMinutos: " << suma.minutos << "\n\nSegundos: " << suma.segundos << endl;

cin.get();
return 0;
}

stAngulo operator+ (stAngulo a1, stAngulo a2) {
stAngulo temp = {
a1.grados + a2.grados,
a1.minutos + a2.minutos,
a1.segundos + a2.segundos,
};

do {
++temp.minutos;
temp.segundos -= 60;
} while (temp.segundos >= 60);

do {
++temp.grados;
temp.minutos -= 60;
} while (temp.minutos >= 60);

return temp;
}

stAngulo operator-(stAngulo a1, stAngulo a2) {
stAngulo temp = {
a1.grados - a2.grados,
a1.minutos - a2.minutos,
a1.segundos - a2.segundos,
};

do {
--temp.minutos;
temp.segundos = abs(temp.segundos);
} while (temp.segundos <= 0);

do {
--temp.grados;
temp.minutos = abs(temp.minutos);
} while (temp.minutos <= 0);

return temp;
}


Alguna manera de poder usar int de tamaño 1 byte? Es solo una cuestión de optimización de memoria.

AlbertoBSD

#1
int8_t unbyte;

char unbyte;

unsigned char unbyte;

uint8_t unbyte;

En el caso de loa int8_t necesitas la biblioteca de funciones stdint

Tambien tengo que agregar que si quieres usar los char como enteroa tienes que anteponer (int)


Por eso me gusta mas

printf("%i",numero);


es mas flexible

saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Bob1098

Cita de: AlbertoBSD en 31 Agosto 2016, 20:26 PM
int8_t unbyte;

char unbyte;

unsigned char unbyte;

unit8_t unbyte;

En el caso de loa int8_t necesitas la biblioteca de funciones stdint

Lo he probado, pero continua fallando, el programa sigue imprimiendo los bytes como caracteres D=. Es posible que sea del compilador? Utilizo el de visual studio 2015

AlbertoBSD

Edite mi post anterior te falta agregar (int)en el cout
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Bob1098

Cita de: AlbertoBSD en 31 Agosto 2016, 20:31 PM
Edite mi post anterior te falta agregar (int)en el cout

Si, pero si agrego (int) se lia parda xD:

Sumando estos dos angulos:

Código (cpp) [Seleccionar]
stAngulo angulo1 = { 23, 15, 20 }, angulo2 = { 2, 35, 29 };

Obtengo como salida en consola:

Grados: 30

Minutos: 11

Segundos: 5

Lo cual no tiene mucho sentido...

AlbertoBSD

Por que no usas printf??

printf("Grados %i ...",variable);
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Bob1098

#6
No tengo problema con printf, pero acostumbrado al cout pues es otra historia. Lo curioso es que con printf() tampoco funciona, debe de ser problema de mi código =S. Gracias por la ayuda  :D