• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

reprezentacja liczb typu float C# pomoc

Fiszki IT
Fiszki IT
+1 głos
379 wizyt
pytanie zadane 5 grudnia 2015 w C# przez rafalx200 Początkujący (250 p.)

http://pl.spoj.com/problems/PP0504D/

 

Próbuję zrobić to zadanie w C#. Na tym forum przeczytałem,żeby użyć referencji (forum odnosiło się do C++) i w strumieniu wyjścia tak go "oszukać", żeby miał przeświadczenie o wypisywaniu int'a a nie float'a. Oczywiście o ile dobrze zrozumiałem. W C# referencję tworzymy "na obiektach" , jeśli używamy struktury tworzymy kopie,tak? Więc ja próbowałem wyświetlić zapis binarny używając referencji. Jak bardzo źle to robie ? ;)


 

static void printfloat(float liczba)
{
float referencja = liczba;
Console.WriteLine((int)referencja);
}

2 odpowiedzi

0 głosów
odpowiedź 5 grudnia 2015 przez adrian17 Ekspert (297,680 p.)
edycja 5 grudnia 2015 przez adrian17
Typy proste (jak float) w C# nie przekazują się przez referencję tylko są po prostu kopiowane (chyba, że o to wyraźnie poprosisz - ref float).

Ale nie rozumiem co do drukowania bajtów floata w ogóle mają referencje, idziesz w jakąś zupełnie dziwną stronę.

Rzuć okiem na to: https://msdn.microsoft.com/en-us/library/yhwsaf3w%28v=vs.110%29.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1
komentarz 5 grudnia 2015 przez rafalx200 Początkujący (250 p.)
Jeszcze jedno: jak znalazłeś konkretnie tą funkcję ? Nie bardzo wiem jak posługiwać się serwisem msdn, napiszesz o nim kilka zdań?
komentarz 5 grudnia 2015 przez adrian17 Ekspert (297,680 p.)
Wyguglowałem "c# float to bytes", to był pierwszy wynik.
0 głosów
odpowiedź 5 grudnia 2015 przez rafalx200 Początkujący (250 p.)
Dzięki,zrobiłem taką funkcję jednak nie zawsze wyniki zgadzają się z odpowiedziami ze Spoja. Po za tym format nie ten.. Jak zamienić myślniki na spacje? Kolejna kwestia to "formatter" . Mógłbyś mi powiedzieć jak to działa i dlaczego akurat tak jest ustawiony? Rozumiem, że w innych językach nie ma takiego prostego przejścia do tablicy bitów,prawda?
komentarz 5 grudnia 2015 przez adrian17 Ekspert (297,680 p.)
Myślniki na spacje? Skąd tam wziąłeś myślniki? Jaki formatter? Po prostu ustawiłem format heksadecymalny w Console.WriteLine.
komentarz 6 grudnia 2015 przez rafalx200 Początkujący (250 p.)
Mówimy na pewno o tym samym? Odnoszę się do Twojego linka z msdn i tam tablice bitów mają spacje.... Gdzie ustawiłeś ten format heksadecymalny w Console.WriteLine?
komentarz 6 grudnia 2015 przez adrian17 Ekspert (297,680 p.)

Link do dokumentacji dotyczył przede wszystkim zamiany floata na tablicę bajtów, niższy przykład drukujący z myślnikami był... przykładem, niczym więcej.

Jak każdy format drukowania:

Console.WriteLine("{0:x}", bajt);
komentarz 8 grudnia 2015 przez rafalx200 Początkujący (250 p.)

Nie za bardzo rozumiem. Mógłbyś mi w taki razie  powiedzieć jak dokładnie tego użyć?

 

public static byte[] GetBytes(
	float value
)

komentarz 8 grudnia 2015 przez adrian17 Ekspert (297,680 p.)

Dokładnie tak, jak zadeklarowali:

byte [] bajty = BitConverter.GetBytes(5.0f);
foreach(byte bajt in bajty)
    Console.WriteLine("{0:X}", bajt);

Jest tu jedna mała różnica która odróżnia wynik od wyniku spoja, ale wierzę że ją zauważysz.

komentarz 8 grudnia 2015 przez rafalx200 Początkujący (250 p.)
Właściwie to 2 róznice. Trzeba było odwrócić tablicę bajtów i przy wypisywaniu szesnastkowym wstawić 'x' bo w wynikach SPOJ-a są małe litery. Bardzo dziękuje za pomoc. Zamyśliłem się i chciałem między kolejne bity wstawić "-" zamiast " ". Jak wtedy należałoby to zrobić? W pętli foreach dla ostatniego elementu wyświetlany miałem znak "-" a przecież żaden po nim nie następuje, Próbowałem "przekonwertować" tablicę bajtów na tablicę stringów ale wtedy już się wszystko pogmatwało :)

Podobne pytania

+1 głos
1 odpowiedź 1,256 wizyt
pytanie zadane 11 stycznia 2016 w C i C++ przez robert9620 Stary wyjadacz (11,540 p.)
0 głosów
1 odpowiedź 144 wizyt
pytanie zadane 24 października 2019 w C# przez Babbage Obywatel (1,510 p.)
0 głosów
0 odpowiedzi 60 wizyt
pytanie zadane 19 maja 2020 w SPOJ przez Adaś Lorek Nowicjusz (120 p.)
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

84,758 zapytań

133,561 odpowiedzi

295,987 komentarzy

56,012 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...