Reprezentacja float
Ostatnio zmodyfikowano 2015-12-02 20:11
patox Temat założony przez niniejszego użytkownika |
Reprezentacja float » 2015-12-02 16:18:55 Witam Link do zadania: http://pl.spoj.com/problems/PP0504D/ #include <iostream>
using namespace std;
int main() { int t; float n; cin >> t; for( int i = 0; i < t; i++ ) { cin >> n; for( int j = sizeof n - 1; j >= 0; j-- ) { cout << hex <<(((( unsigned char * ) & n )[ j ] ) + 48 ) - 48 << endl; } } }
Czy ktoś mógłby mi wytłumaczyć tą linijkę i nakierować tak, abym mógł ją zrozumieć? Jedyne co z niej wiem to to, że cout << hex konwertuje na szesnastkowy, a w środku jest konwersja z float do char, skopiowałem tą konwersję po wielu próbach napisania czegoś takiego własnoręcznie, próbowałem wskaźnikiem odwołać się do danego bitu, ale za każdym razem bezskutecznie, albo wyświetlał się ciągle ten sam znak, albo też wychodziły dziwne znaczki (nie wiem, czy takie same, czy inne) co naprawiłem dopiero kopiując gotową konwersję, ale początkowo wyświetlało mi też jakieś dziwne znaczki, naprawiło się dopiero po dodaniu i odjęciu zmiennej (wpisałem 48, bo początkowo chciałem sprawdzić, czy kody ascii nie przyjmują liter i dostałem liczby, po obliczeniu ich w systemie szesnastkowym wyszła odpowiedź, więc pomyślałem, że znów to po prostu odejmę i wtedy wynik wyświetlał się prawidłowy). cout << hex <<(((( unsigned char * ) & n )[ j ] ) + 48 ) - 48 << endl;
|
|
Anim |
» 2015-12-02 16:30:05 w tym zadaniu dużo łatwiej skorzystac z funkcji printf("%x")...
bo z tego co kojarzę to robi to samo co konwersja dla couta, której użyłeś (chociaż może się mylę, jeśli tak, to wybacz) |
|
patox Temat założony przez niniejszego użytkownika |
» 2015-12-02 20:10:11 tylko to nie wyjaśnia, dlaczego muszę do konwersji dodawać i odejmować zmienną przy konwersji couta |
|
pekfos |
» 2015-12-02 20:11:18 tylko to nie wyjaśnia, dlaczego muszę do konwersji dodawać i odejmować zmienną przy konwersji couta |
Nie musisz. Wystarczy wynik rzutować na int. |
|
« 1 » |