mam taki kod odpowiedzialny za przedstawienie liczby float w postaci hex.
Niestety w pewnych miejscach mam nadmiar "f" nie wiem czemu. Ma ktoś jakiś pomysł?
http://pastebin.com/R8A9xCJd
Screen z wyjściem w załączniku.
Błędnie przedstawia mi liczbę float w postaci hex
- Rejestracja: dni
- Ostatnio: dni
- Postów: 839
- Rejestracja: dni
- Ostatnio: dni
Przede wszystkim to undefined behavior. W C to jeszcze jest dozwolone (ale może być trap represntation), ale w C++ nie.
Po drugie jeżeli już musisz tak robić (bo np. w GCC będzie to działać) to użyj unsigned char w tej unii a nie char. A najlepiej std::uint8_t.
- Rejestracja: dni
- Ostatnio: dni
#include <bitset>
#include <iostream>
using namespace std;
int main()
{
union Repr { float f; uint32_t u; } r;
unsigned n;
for(cin>>n;n--;cout<<bitset<32>(r.u)) cin>>r.f;
return 0;
}
- Rejestracja: dni
- Ostatnio: dni
- Postów: 839
Wzorowałem się na przykładach z C, tam pomysłodawca przedstawiał to z pomocą printf(), niestety jak chcę przedstawić poszczególne bajty wyskakują mi krzaczki zamiast postaci szesnastkowej. Przekonwertowałem więc do short i niby wartości są o.k., niestety nie moge się w żaden sposób pozbyć nadmiaru "f" w niektórych przykładach.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 839
No właśnie i tu dochodzimy do sedna całego mojego problemu ze SPOJ... Jakie w końcu biblioteki są "dozwolone" w SPOJu? Bo kiedys działało mi tylko iostream, 3h temu zobaczyłem, że działa mi <vector> (co mnie strasznie poirytowało...). Jest gdzieś jakis spis dozwolonych bibliotek?
- Rejestracja: dni
- Ostatnio: dni
Jak wybierzesz że piszesz w c++14 to będziesz mieć wszystkie standardowe dla C++14 nawet <thread> z tym że ilość wątków na proces jest ograniczone na SPOJ z poziomu systemu.
Czyli dołączyć możesz ale z użyciem ... to już inna sprawa.