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:
#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.
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
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
Edite mi post anterior te falta agregar (int)en el cout
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:
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...
Por que no usas printf??
printf("Grados %i ...",variable);
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