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
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ć.
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
.
Ale skąd komputer ma wiedzieć, że 1011 = -5 a nie 11 którą też można tak zakodować?
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.
Wydaje mi się że na 8 bitach maksymalna liczba dodatnia to będzie 127 a potem ujemne.