Article View: pl.comp.lang.c
Article #1052Re: Operacje na bitach
From: Karpierz
Date: Sat, 31 Jan 1998 15:51
Date: Sat, 31 Jan 1998 15:51
52 lines
2882 bytes
2882 bytes
Qrczak <qrczak@knm.org.pl> napisal > On 29 Jan 1998, Karpierz wrote: [...] > Więc można się zająć liczbami ujemnymi. Ich nie da się skonwertować na > unsigned long bez straty. Są dwie możliwości (załóżmy na chwilę, że > sizeof (int) == 2, sizeof (long) == 4). Albo (unsigned long) (int) (-1) > jest równe 0xFFFFFFFF, albo 0xFFFF. Twierdzę, że pierwsza jest o wiele > logiczniejsza. > > Otóż konwertujemy -1 na unsigned long. Wszystko jedno, jakiego dokładnie > typu jest to -1. Ważne, że to jest dokładnie -1 i chcemy to zapisać w > unsigned long. "Najbliższą" minus jedynce wartością typu unsigned long > jest 0xFFFFFFFF, więc tak zostanie zapisane, niezależnie od tego, skąd > ta -1 się wzięła. Otoz wlasnie nie jest wszystko jedno jakiego typu jest -1; Musisz pamietac o tym ze -1 to nie to samo co -1U. Wiec np: int a = -1; unsigned int b = -1; (unsigned long) a jest rowne 0xFFFFFFFF (unsigned long) b jest rowne 0x0000FFFF czyli wlasnie wg zasady ktara napisalem wczesniej: "Czyli faktycznie o propagacji znaku decyduje nie typ na ktory rzutujemy ale typ wartosci rzutowanej" Wniosek z calej tej dyskusji przynajmniej dla mnie jest jeden. Nie wszystko jest takie oczywiste jak sie na pierwszy rzut oka wydaje i do konca madrych tu nie ma jesli cos w raporcie jezyka /nie wiem jak w ANSI, ja mowie o K&R/ nie jest do konca scisle okreslone. Nie chodzi mi tu o ([unsigned] int) -> ([unsigned] long), to akurat jest, ale glownie o ([unsigned] short) -> ([unsigned] long) i o i o ([unsigned] char) -> ([unsigned] long). Przy nauce C i w praktyce wiele mi to zawsze sprawialo klopotow i wiele ukrytych bledow tez temu zawdzieczam i dlatego poruszylem ten temat. Inn sprawa ze napewno nie wart jest on tak rozbudowanej dyskusji, ale.. jakos tak wyszlo ..:)) Moze damy pokoj juz tym rzutom ? :) Jest tyle ciekawszych tematow... -- Pozdrawiam Adam Karpierz mailto:karpierz@intertele.pl http://www.intertele.pl/users/karpierz
Technical Details
Message-ID:
<01bd2e49$756e5fe0$9cbaccc2@karpierz.dyn.ml.org>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.nask.pl!ict.pwr.wroc.pl!not-for-mailReferences:
<34D0605D.5843@imm.org.pl> <01bd2caf$70afa4a0$8cbaccc2@karpierz.dyn.ml.org> <34D0BBCF.ADA1488D@obop.com.pl> <01bd2ce4$bb394460$8ebaccc2@karpierz.dyn.ml.org> <Pine.LNX.3.96.980131092148.11396M-100000@qrnik.knm.org.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.nask.pl!ict.pwr.wroc.pl!not-for-mail From: "Karpierz" <karpierz@inter.intertele.pl> Newsgroups: pl.comp.lang.c Subject: Re: Operacje na bitach Date: 31 Jan 1998 15:51:00 GMT Organization: Technical University of Wroclaw, Poland Lines: 53 Message-ID: <01bd2e49$756e5fe0$9cbaccc2@karpierz.dyn.ml.org> References: <34D0605D.5843@imm.org.pl> <01bd2caf$70afa4a0$8cbaccc2@karpierz.dyn.ml.org> <34D0BBCF.ADA1488D@obop.com.pl> <01bd2ce4$bb394460$8ebaccc2@karpierz.dyn.ml.org> <Pine.LNX.3.96.980131092148.11396M-100000@qrnik.knm.org.pl> NNTP-Posting-Host: ppp144.intertele.pl X-Newsreader: Microsoft Internet News 4.70.1161 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit