🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #1045

Re: Operacje na bitach

#1045
From: Karpierz
Date: Thu, 29 Jan 1998 18:35
70 lines
2850 bytes
Adam Jancewicz <adash@obop.com.pl> napisal
Karpierz wrote:
> 
> Marek Kotowski <mkot@imm.org.pl> napisal
> > Karpierz wrote (w watku "Rezerwacja pamieci"):
 [...]
> > > 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) :)

Wlasnie, to jeszcze jeden kwiatek do korzucha w C.
Raz sa rowne a raz nie....

[...]

> 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.

to jest dla mnie jasne 

>3. (unsigned long)a - z moich doświadczeń wynika, że jest 
>    równoważne (unsigned long)(long)a.

Wlasnie, to jest ten problem o ktorym mowilem.
Wiem ze tak jest. Chociaz trudno sie chyba zgodzic, ze
zapis (unsigned long) to sugeruje, raczej wprost przeciwnie :(. 
Czyli faktycznie o propagacji znaku decyduje nie typ na ktory
rzutujemy ale typ wartosci rzutowanej, ale czy zawsze czy tylko 
w przypadku wartosci long i int:
Czy podobna zasada obowiazuje rowniez dla innych typow 
calkowitych ?
Wydaje sie ze tak ale czy mozna byc na 100% pewnym, i czy
jest to gdzies wyraznie napisane ?.

>Sam jestem ciekawy czy jakiś standard to precyzuje (zwłaszcza punt 3.).

Ja tez. Dokladnie o ten przypadek mi chodzi.
Dla C++ jest to troche dokladniej okreslone (promocja calkowita to sie
nazywa).
Ale dla K&R C jest wyrazna luka i dlatego pytalem poprzednio jak to 
precyzuje standard.
Szczegolnie chodzi mi o przypadek.

(long) a  i (unsigned long) a 

gdzie a jest typu short lub unsigned short i char i unsigned char

/przy zalozeniu ze sizeof(long) > sizeof (int) > sizeof (short)/

-----
Pozdrawiam (rowniez)
Adam (rowniez)
Technical Details
Message-ID: <01bd2ce4$bb394460$8ebaccc2@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-mail
References: <34D0605D.5843@imm.org.pl> <01bd2caf$70afa4a0$8cbaccc2@karpierz.dyn.ml.org> <34D0BBCF.ADA1488D@obop.com.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: 29 Jan 1998 18:35:29 GMT
Organization: Technical University of Wroclaw, Poland
Lines: 72
Message-ID: <01bd2ce4$bb394460$8ebaccc2@karpierz.dyn.ml.org>
References: <34D0605D.5843@imm.org.pl> <01bd2caf$70afa4a0$8cbaccc2@karpierz.dyn.ml.org> <34D0BBCF.ADA1488D@obop.com.pl>
NNTP-Posting-Host: ppp142.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