Article View: pl.comp.lang.c
Article #1044Re: Operacje na bitach
From: Adam Jancewicz
Date: Thu, 29 Jan 1998 17:26
Date: Thu, 29 Jan 1998 17:26
76 lines
2626 bytes
2626 bytes
Karpierz wrote:
>
> Marek Kotowski <mkot@imm.org.pl> napisal
> > Karpierz wrote (w watku "Rezerwacja pamieci"):
> [...]
> > > Nie powiem wprost ale zostawie to w formie zagadki
> >> dla wszystkich:
> >
> > > Prosze sprawdzic:
> >
> > > typedef unsigned int uint; // taka moja fanaberia
> >
> > > int a = ~0; // lub dowolna wartosc ujemna
> > > uint b = ~0; //
> >
> > ....
> >
> > > printf ("\n%ld %ld", (long) a, (long) b);
> >
> > > Wydaje sie ze powinno to dac identyczne dwie wartosci,
> > > prawda ?
> >
> > Nie wydaje sie. :-)
>
> Nie zgodze sie :). Sa dwie rozne wartosci, ale _wydaje_ sie
> (przynajmniej mnie), ze powinny byc identyczne.
I są identyczne, w środowiku w którym pracuję sizeof(long) ==
sizeof(int) :)
Oczywiście po zamianie int na char wartości są różne i tak
powinno być.
> Osobiscie w/w klopoty czy brak oczywistosci w rzutach
> to zrodlo masy bledow i jest to jedna z niewatpliwych wad C.
>
> > > Przeciez rzutujemy _jawnie_ zarowno a jak i b na long.
> >
> > Rzecz jest w promocji typu. Inaczej promowany do long
> > jest typ int (znak jest powielany), inaczej typ
> > unsigned int (znak nie jest powielany).
>
> Ponawiam prosbe o odpowiedz jak to ujmuje standard ?
> Jaka jest ogolna zasada przy tego typu sytuacjach ?
>
Odpowiedź już masz powyżej, ale może badziej szczegółowo :
Założe dla ułatwienia, żę sizeof(int) ==2 i sizeof(long) == 4
int a;
unsigned int b;
1. (long)a - a jest signed, więc bit znaku jest propagowany na
starsze słowo, a a jest kopiowane do młodszego
2. (long)b - b jest kopiowane do młodszego słowa.
3. (unsigned long)a - z moich doświadczeń wynika, że jest
równoważne (unsigned long)(long)a.
Sam jestem ciekawy czy jakiś standard to precyzuje (zwłaszcza punt 3.).
Pozdrawiam
Adam
PS.
Przyjąłem konkretne nazwy typów tylko dlatego, że tak mi było
łatwiej wyjaśnić.
A.
--
Adam Jancewicz
mailto: adash@obop.com.pl
Technical Details
Message-ID:
<34D0BBCF.ADA1488D@obop.com.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.pse.pl!zwieracz!not-for-mailReferences:
<34D0605D.5843@imm.org.pl> <01bd2caf$70afa4a0$8cbaccc2@karpierz.dyn.ml.org>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.pse.pl!zwieracz!not-for-mail From: Adam Jancewicz <adash@obop.com.pl> Newsgroups: pl.comp.lang.c Subject: Re: Operacje na bitach Date: Thu, 29 Jan 1998 18:26:39 +0100 Organization: OBOP Lines: 89 Message-ID: <34D0BBCF.ADA1488D@obop.com.pl> References: <34D0605D.5843@imm.org.pl> <01bd2caf$70afa4a0$8cbaccc2@karpierz.dyn.ml.org> NNTP-Posting-Host: hq.obop.com.pl Mime-Version: 1.0 X-Mailer: Mozilla 4.04 [en] (X11; I; Linux 2.0.32 i586) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit