Article View: pl.comp.lang.asm
Article #844Re: Operacje ze znakiem i bez znaku
From: Bogdan (bogdro)
Date: Sat, 18 Nov 2006 12:13
Date: Sat, 18 Nov 2006 12:13
47 lines
3727 bytes
3727 bytes
Bernard napisał(a): > Bogdan (bogdro) wrote: >> Johnny napisał(a): >>> Rozumiem ideę związaną ze sprawdzaniem danych wejściowych - to jest dla >>> mnie jasne. Chodzi mi o praktykę w sytuacji gdy użytkownik ma prawo >>> wprowadzić albo ujemną liczbę albo dodatnią. Tego nie wiemy. Jaka jest >>> praktyka? Czy: >>> - sprawdza się występowanie znaku minus i skacze do operacji >>> przeznaczonych dla liczb ujemnych/ dodatnich >> >> Tak chyba będzie lepiej. W czasie wczytywania liczb należy jednak >> przy okazji zadbać, by nie wykroczyły z określonego przedziału (tzn. >> aby nie można było wpisać więcej niż 127 czy mniej niż -128 dla bajtu). > > No tu Kolega przegiął. Albo zakładamy, że dane mogą mieć znak i piszemy > program tak, żeby przetwarzał poprawnie lizby ze znakiem, albo > zakładamy, że liczby są nieujemne i piszemy program dla nieujemnych. > Sprawdzanie i rozgałęzianie to pomysł na poziomie programisty - > przedszkolaka. Być może. Kto powiedział, że ja jestem profesjonalistą? :) Ja proponowałem, żeby program poprawnie działał na liczbach ujemnych (pierwsza moja odpowiedź), potem dodałem sprawdzanie zakresu w czasie wpisywania. Być może cytowaną wyżej wypowiedź napisałem zbyt pochopnie, bo właśnie zauważyłem problemik: jak wiecznie złośliwy użytkownik wpisze najpierw 130, a potem -20, to klops. Ogólnie więc zalecam używanie operacji znakowanych i sprawdzanie liczb w czasie wpisywania. > Odnoszę wrażenie, że Autor wątku nie wyczuwa, że operacje dla liczb ze > znakiem działają tak samo dobrze dla liczb dodatnich i ujemnych. Rónica > pomiędzy operacjami "ze znakiem" i "bez znaku" polega na interpretacji > takich wartości, które mają najbardziej znaczący bit równy 1 > (odpowiednio jako ujemnych i bardzo dużych dodatnich). Tak. Rzecz w tym, aby prawidłowo zinterpretować wynik jako ujemny lub dodatni, a do tego potrzebna jest wiedza o typie wpisywanych danych. Jak użytkownik chce obliczyć -1*1, to wolałby zobaczyć -1 niż 255. Należy więc z góry przyjąć, co chcemy zrobić. Wyjścia są 2: - liczby bez znaku, sprawdzanie zakresu 0-FF i flagi CF po działaniach - liczby ze znakiem, sprawdzanie zakresu 80h-7Fh i flagi OF -- Pozdrawiam, Bogdan (Linux i FreeDOS) Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 Rozmawiaj bezpiecznie: www.JabberPL.org Surfuj anonimowo: tor.eff.org
Technical Details
Message-ID:
<ejmtf0$b9c$1@atlantis.news.tpi.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mailReferences:
<ejjrdm$987$1@atlantis.news.tpi.pl> <ejjstf$evq$1@atlantis.news.tpi.pl> <ejk3fm$eaq$1@atlantis.news.tpi.pl> <1163769262.940587.315650@m73g2000cwd.googlegroups.com> <ejkglg$99b$1@atlantis.news.tpi.pl> <ejkhm4$dat$1@atlantis.news.tpi.pl> <455ec82b$0$17966$f69f905@mamut2.aster.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail From: "Bogdan (bogdro)" <bogdan@bogdan.pl> Newsgroups: pl.comp.lang.asm Subject: Re: Operacje ze znakiem i bez znaku Date: Sat, 18 Nov 2006 13:13:54 +0100 Organization: tp.internet - http://www.tpi.pl/ Lines: 47 Message-ID: <ejmtf0$b9c$1@atlantis.news.tpi.pl> References: <ejjrdm$987$1@atlantis.news.tpi.pl> <ejjstf$evq$1@atlantis.news.tpi.pl> <ejk3fm$eaq$1@atlantis.news.tpi.pl> <1163769262.940587.315650@m73g2000cwd.googlegroups.com> <ejkglg$99b$1@atlantis.news.tpi.pl> <ejkhm4$dat$1@atlantis.news.tpi.pl> <455ec82b$0$17966$f69f905@mamut2.aster.pl> NNTP-Posting-Host: acss251.neoplus.adsl.tpnet.pl Mime-Version: 1.0 X-Trace: atlantis.news.tpi.pl 1163852065 11564 83.11.46.251 (18 Nov 2006 12:14:25 GMT) X-Complaints-To: usenet@tpi.pl NNTP-Posting-Date: Sat, 18 Nov 2006 12:14:25 +0000 (UTC) User-Agent: Thunderbird 1.5.0.8 (X11/20061025) In-Reply-To: <455ec82b$0$17966$f69f905@mamut2.aster.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit