Konwersja liczb pomiędzy systemami – problem rozpoznawania znaku liczb

0

Napisałem program który ma zamieniać liczby w systemie binarnym na dziesiętny ale zamienia je na te dodatanie bo nie wiem w jaki sposób ma wykrywać czy liczba jest dodatnia czy ujemna np 1000 może być 8 lub -8 a np 1101 może być 13 lub -3

1

Tak bez kodu to ciężko się odnieść. Chociaż pewnie dużego problemu nie ma, bo wczytujesz wartości 32- lub 64-bitowe wartości, więc bit znaku jest znacznie dalej. :P No chyba, że dostajesz wartość binarną bez określenia typu, to wtedy nie idzie się domyśleć.

1

Dokladnie nie wiem, jaki ma być program, ale wydaje mi się, że trzeba będzie jakoś te liczby binarne kodować; właśnie, jaka jest dodatnia, a jaka ujemna? W skrócie:
robimy tak, że bit z lewej służy jako znak, jak jest0 to liczba jest dodatnia (zapisana na pozostałych bitach), a jak jest włączony 1, to jest to liczba ujemna, specjalnej postaci. Dla przykładu, w czterech bitach:
1011 = -8 + 0 + 2 + 1 = -5
Dziesiętne -5 - bit znaku włącza się z minusem. W zasadzie Możesz to już zakodować.

Zostaje jeszcze problem, skąd ma ktoś wiedzieć, jak zapisać liczbę ujemną. Tu na pomoc przychodzi tzw. 2's complement, Ciągle będąc w czterech bitach:
101 -> 1011 = -5 - w kodowaniu powyżej.
Jak działa ->(two's complement)? Dopisujemy 0 z lewej (bit znaku): 0101, odwracamy bity, 1010 i dodajemy 1, więc finalnie jest: 1011, czyli -5.

0

Ale skąd komputer ma wiedzieć, że 1011 = -5 a nie 11 którą też można tak zakodować?

1

Właśnie, to już Twoje zadanie, Musisz to zakodować, to już zależy od tego, co użytkownik podaje na wejściu, i jaka jest w ogóle specyfikacja programu.

0

Wydaje mi się że na 8 bitach maksymalna liczba dodatnia to będzie 127 a potem ujemne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1