• 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

+1 głos
1,088 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 Mentor (354,800 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 Mentor (354,800 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 Mentor (354,800 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 Mentor (354,800 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 Mentor (354,800 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ź 2,185 wizyt
pytanie zadane 11 stycznia 2016 w C i C++ przez robert9620 Stary wyjadacz (11,640 p.)
0 głosów
1 odpowiedź 814 wizyt
pytanie zadane 24 października 2019 w C# przez Babbage Obywatel (1,630 p.)
0 głosów
0 odpowiedzi 363 wizyt
pytanie zadane 19 maja 2020 w SPOJ przez Adaś Lorek Nowicjusz (120 p.)

93,604 zapytań

142,528 odpowiedzi

322,995 komentarzy

63,090 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...