🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Operacje na bitach

#1044
From: Adam Jancewicz
Date: Thu, 29 Jan 1998 17:26
76 lines
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-mail
References: <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