Reprezentacja liczb typu float
Ostatnio zmodyfikowano 2015-09-13 22:31
Garniturek Temat założony przez niniejszego użytkownika |
Reprezentacja liczb typu float » 2015-09-13 16:51:49 Witam, robię zadanie ze spoja: http://pl.spoj.com/problems/PP0504D/ Udało mi się napisać program, który zamienia liczbę zapisaną systemem dziesiętnym na liczbę zapisaną systemem szesnastkowym, ale nie za bardzo kumam o co chodzi autorowi zadania na wyjściu: bajty reprezenacji kolejnych liczb. Pomocy! #include <iostream> #include <conio.h> #include <math.h> using namespace std; float a; int b; int c; int d; float e; int main() { cin >> a; do { b++; } while( a > pow( 16, b ) ); do { c = a / pow( 16, b - 1 ); d = pow( 16, b - 1 ); e = a - c * pow( 16, b - 1 ); a = e; b--; if( c < 10 ) cout << c; else if( c == 10 ) cout << "A"; else if( c == 11 ) cout << "B"; else if( c == 12 ) cout << "C"; else if( c == 13 ) cout << "D"; else if( c == 14 ) cout << "E"; else if( c == 15 ) cout << "F"; } while( b != 0 ); return 0; }
|
|
mateczek |
Zmiana liczby to tylko zmiana sposobu jej wyświetlania (liczba jest ta sama) » 2015-09-13 18:02:17 #include <iostream>
int main() { int a; std::cin >> a; std::cout << std::hex << a << std::endl; }
|
|
Monika90 |
» 2015-09-13 18:07:37 W zadaniu chodzi o to, by potraktować zmienną typu float jak tablicę bajtów i wyświetlić zawartość tej tablicy. |
|
Garniturek Temat założony przez niniejszego użytkownika |
» 2015-09-13 19:00:59 mateczek, funkcja hex nie działa przy liczbach zmiennoprzecinkowych, próbowałem zamienić float na int, ale mi nie pykło, więc zrobiłem tak jak mam |
|
Garniturek Temat założony przez niniejszego użytkownika |
» 2015-09-13 19:09:18 Nie rozumiem. Mam pobierać liczbę do tablicy float i pisać ile ma bajtów? A to nie będą dla każdego float zawsze 4 bajty. Pomocy! |
|
michal11 |
» 2015-09-13 19:47:36 Offtop ale imho ten zapis: if( c < 10 ) cout << c; else if( c == 10 ) cout << "A"; else if( c == 11 ) cout << "B"; else if( c == 12 ) cout << "C"; else if( c == 13 ) cout << "D"; else if( c == 14 ) cout << "E"; else if( c == 15 ) cout << "F"; czytelniej wyglądałby ze switchem: switch( c ) { case 10: cout << "A"; break; case 11: cout << "B"; break; case 12: cout << "C"; break; case 13: cout << "D"; break; case 14: cout << "E"; break; case 15: cout << "F"; break; default: cout << c; }
A w ogóle najepiej to trzeba było sobie zrobić stringa i odwoływać się do indeksu: string hexTab = "0123456789ABCDEF";
cout << hexTab[ c ];
|
|
Monika90 |
» 2015-09-13 22:20:03 Nie, masz pobrać adres zmiennej typu float i rzutować go na wskaźnik do char lub unsigned char. Używasz tego wskaźnika by uzyskać dostęp do pojedynczych bajtów z których składa się zmienna. |
|
Garniturek Temat założony przez niniejszego użytkownika |
» 2015-09-13 22:31:38 Dzięki wielkie wszystkim za pomoc i wytłumaczenie :) Program do konwersji może się kiedyś przyda tymczasem biorę pod warsztat od nowa to zadanie :P |
|
« 1 » |