Momencik, trwa przetwarzanie danych   loading-animation

Mistrzowie.org

Pokaż menu
Szukaj

Liczba przeciwna

by j_psikuta
Dodaj nowy komentarz
avatar joypad
3 5

No spoko, tylko pytanie jest o integera. Ale spoko, jest rozwiązanie: public int ChangeSign(int num) { switch(num) { case 0: return 0; case 1: return -1; case -1: return 1; case 2: return -2; case -2: return 2; /* i tak aż do 2 miliardów z obu stron, albo ile nam trzeba */ } }

Odpowiedz
avatar Budzik
1 3

@joypad: Genialne, a masz może taką samą funkcję dla longów?

Odpowiedz
avatar banan113
1 5

trzeba kupic mocniejszy komputer z koprocesorem ogarniajacym mnozenie.

Odpowiedz
avatar kokosnh
6 6

Ja bym spróbował czegoś trudniejszego np metoda reverse co zwraca parametr int pomnożony razy -1.

Odpowiedz
avatar LichMcKnee
1 1

@kokosnh: Z moją zerową wiedzą informatyczną to wciąż ma sens, więc musi działać :)

Odpowiedz
avatar Frogy0
2 2

if (i == 5) return -5; if (i == -5) return 5;

Odpowiedz
avatar karakar
0 0

Liczba ujemna różni się pierwszym bitem. Komputer realizuje odejmowanie poprzez dodawanie tyle by przekręcić licznik. Nie testowałem tego, ale teoretycznie dodając 2147483648 (przy 32 bitowym int) powinniśmy przekręcić pierwszy bit uzyskując liczbę odwrotną.

Odpowiedz
avatar karakar
0 0

@karakar: sprawdziłem: return (2147483647-x)+2147483647+2;

Odpowiedz
avatar joypad
0 0

@karakar: "Liczba ujemna różni się pierwszym bitem." - na większości dzisiejszych komputerów nie jest to prawda - inty implementuje się w kodzie uzupełnień do dwóch. Liczba ujemna w takim zapisie to odwrócone wszystkie bity + 1 (pomijając over/underflowy)

Odpowiedz
avatar karakar
0 0

@joypad: Może źle się wyraziłem. Miałem na myśli, że liczby ujemne w pierwszym bicie mają 1, a dodatnie 0. Odejmowanie jest realizowane poprzez przekręcenia licznika. Żeby od 32 bitowego int-a odjąć 1, procesor dodaje 4294967296.

Odpowiedz
avatar Arara
0 0

Nie umiem programować, ale chyba "i-=2i" by wystarczyło?

Odpowiedz
avatar KozaSWD
0 0

Captain Obvious? Nie jestem programistą, coś ogarniam ale wolę się upewnić o co chodzi.

Odpowiedz
avatar karakar
5 5

@KozaSWD: nie trzeba być programistą wystarczy minimum wiedzy z matematyki. By odwrócić znak wystarczy pomnożyć przez -1, albo odjąć od 0. Funkcja powyżej jeśli jest znak "-" to go wycina, a jak nie ma dodaje.

Odpowiedz

Zmodyfikowano 1 raz. Ostatnia modyfikacja: 23 września 2018 o 19:26

avatar KozaSWD
0 0

@karakar: Dzięki

Odpowiedz
avatar banan113
-2 2

@karakar: nie da się pomnożyć przez -1. Jak już to podzielić przez -1 albo pomnożyć razy -1.

Odpowiedz
avatar banan113
-2 2

@karakar: nie uznaję tej strony, więc nie jest poprawne.

Odpowiedz
avatar zorann
0 0

int x=i; while (i<0) { i++; } if (i!=x) { i=x*-1; }

Odpowiedz
avatar cassper
0 0

@zorann: Niby jak ma to zadziałać? Według tego co napisałeś program wykona się następująco: dopóki i jest mniejsze niż 0 zwiększ wartość i o 1. Następnie jeśli i jest różne od x, przypisz i wartość równania x*-1. Rozumiem x*-1 ale do czego to "i" i w jakim celu iterujesz jego inkrementacje? Bez sensu. Samo x*-1 by wystarczyło

Odpowiedz
avatar zorann
0 0

@cassper: Poważnie? No patrz, a ja myślałem, że to najprostsza droga do celu, muszę zoptymalizować swoje skrypty ;)

Odpowiedz
avatar cassper
0 0

Proste y=x*java.lang.Match.signum(x); To nam daje zawsze odwrotność liczby i powinno działać dla każdego typu

Odpowiedz
avatar cassper
0 0

@cassper: Błąd, powinno być -1*Math.abs(x)*Math.signum(x))

Odpowiedz
avatar sirzooro
0 0

Tam jest BUG! Funkcja z zera robi zero ujemne.

Odpowiedz
avatar Alex2422
-1 1

Kiedy masz 2 z matmy, ale chcesz być programistą.

Odpowiedz
Udostępnij