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.
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
.
#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;
}
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.
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?
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.
@Endrju jak uzywam int8 to wynik mam taki sam jak z użyciem samego char - pokazuje mi krzaczki zamiast postaci szesnastkowej.