🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #844

Re: Operacje ze znakiem i bez znaku

#844
From: Bogdan (bogdro)
Date: Sat, 18 Nov 2006 12:13
47 lines
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-mail
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>

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