Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Jel ovo greska u kompajleru ?

[es] :: C/C++ programiranje :: Jel ovo greska u kompajleru ?

[ Pregleda: 3044 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Ivan Vasić

Član broj: 14756
Poruke: 631
*.EUnet.yu

Jabber: ivasic@elitesecurity.org


Profil

icon Jel ovo greska u kompajleru ?03.03.2004. u 22:44 - pre 244 meseci
Zasto mi x =0xFFFFFFFF & 0x80000000 vraca nulu ?
x je unsigned short al' mislim da to nema veze, probao sam i sa unsigned int.

Koristim MS Visual C++ 5.0
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.glfd.dial.virgin.net



+4 Profil

icon Re: Jel ovo greska u kompajleru ?03.03.2004. u 22:55 - pre 244 meseci
Za "unsigned short" je normalno, jer ti kompajler odseca dva visha bajta i ostavlja nizhe koji su nula.
ALI za unsigned int ne sme da bude 0! Nemam VS5, tako da ne mogu da tvrdim da li je bug, ali na novijim je sve u redu
 
Odgovor na temu

iinmii
Nikola Marić
Novi Sad

Član broj: 14098
Poruke: 84
195.250.117.*



Profil

icon Re: Jel ovo greska u kompajleru ?03.03.2004. u 22:58 - pre 244 meseci
probaj sa long int
koliko ja znam unsigned int range je 0-FFFF
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.adsl.zonnet.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Jel ovo greska u kompajleru ?03.03.2004. u 22:59 - pre 244 meseci
Evo šta kaže GCC:

Code:
#include stdio.h
 
 int main() {
     unsigned short i = 0xFFFFFFFF  0x80000000;
 
     printf("%dn", i);
     return 0;
 }

a kompajliranje:
Code:
/home/filip/work/prg/c/
 gcc -o bitwise bitwise.c
 bitwise.c: In function `main':
 bitwise.c:4: warning: large integer implicitly truncated to unsigned type
 
 Compilation finished at Wed Mar  3 23:54:09
 

Inače, pokrenut program i kod mene vraća nulu.

f

 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1793
*.microsoft.com



+18 Profil

icon Re: Jel ovo greska u kompajleru ?04.03.2004. u 00:23 - pre 244 meseci
To upravo tako treba i da bude. Evo zasto:

unsigned short x = 0xFFFFF & 0x80000;

je isto sto i:

unsigned short x = (unsigned short) 0x80000; // zanemarimo warning

a to je isto sto i:

unsigned short x = 0x0000;

zato sto kada 0x80000 prebacis u short, ti u stvari uzimas njegovih donjih 16 bita, a to je 0.
 
Odgovor na temu

Ivan Vasić

Član broj: 14756
Poruke: 631
*.EUnet.yu

Jabber: ivasic@elitesecurity.org


Profil

icon Re: Jel ovo greska u kompajleru ?04.03.2004. u 10:00 - pre 244 meseci
Ok, probao sam sve kombinacije opet nista...
kad stavim x - unsigned int ili long
onda mi rezultat bude 2147483648 ?!

U sustini ovo radim jer raspakujem bit po bit 32bit integer, e ova brojka se dobije svuda umesto jedinice ! Nule funkcionisu ali kecevi su "predstavljeni" ovom brojkom.
Npr. niz za devetku bi bio : ( LSB 4 bita )

2147483648
0
0
2147483648


mogu da jednostavno zamenim ovo kecevima i voila, ali me i zanima sto se zaglupljuje ....
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.decis.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Jel ovo greska u kompajleru ?04.03.2004. u 10:06 - pre 244 meseci
"ivan@elfak" wrote:
Citat:
onda mi rezultat bude 2147483648 ?!

U sustini ovo radim jer raspakujem bit po bit 32bit integer, e ova brojka se dobije svuda umesto jedinice ! Nule
Rezultat i treba da bude 2147483648. 0xffffffff / 0x80000000 = 0x80000000 = 2147483648.

Da li možeš da nam pošalješ minimalan primer koda, i da kažeš: evo, ovde program ispisuje to-i-to, a ja mislim da treba da ispiše to2-i-to2?

f

 
Odgovor na temu

Ivan Vasić

Član broj: 14756
Poruke: 631
*.45.EUnet.yu

Jabber: ivasic@elitesecurity.org


Profil

icon Re: Jel ovo greska u kompajleru ?04.03.2004. u 10:30 - pre 244 meseci
Ups, izvini, nisam se setio da pogledam binarni ekvivalent broju 2147483648 ...

Sada je sve u redu. Funkcionise.

inace samo sam hteo da raspakujem int prostom petljom
Code:

for(i=0;i<32;i++)
{
printf("%d", (broj & 0x80000000) != 0)
broj<<=1;
}

medjutim izgleda se malo zbunio, pa sam posle u debugeru gledao rezultat onog "&" i kad sam promenio short u int u debugeru dobih onaj broj i zaboravio sam na "!=0"
sto je davalo ispravan rezultat.

Sve u svemu hvala, reseno je !
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.decis.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Jel ovo greska u kompajleru ?04.03.2004. u 11:02 - pre 244 meseci
Uzgred, verovatno je bolja ideja da bitove vadiš iz unsigned broja počev od bita najmanje težine. Onda ti program ne zavisi od stvarne dužine tipa int u bitovima.

f

 
Odgovor na temu

Ivan Vasić

Član broj: 14756
Poruke: 631
*.106.EUnet.yu

Jabber: ivasic@elitesecurity.org


Profil

icon Re: Jel ovo greska u kompajleru ?05.03.2004. u 13:28 - pre 244 meseci
Citat:
filmil:
Uzgred, verovatno je bolja ideja da bitove vadiš iz unsigned broja počev od bita najmanje težine. Onda ti program ne zavisi od stvarne dužine tipa int u bitovima.

Ok, broj i jeste unsigned, al ne kontam dokle mi ide petlja ?
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Jel ovo greska u kompajleru ?05.03.2004. u 13:44 - pre 244 meseci
Citat:

Ok, broj i jeste unsigned, al ne kontam dokle mi ide petlja ?



Dok broj ne postane jednak nuli, tj. kad svi bitovi „iscure“ sa desne

strane.


f
 
Odgovor na temu

Ivan Vasić

Član broj: 14756
Poruke: 631
*.21.EUnet.yu

Jabber: ivasic@elitesecurity.org


Profil

icon Re: Jel ovo greska u kompajleru ?06.03.2004. u 11:32 - pre 244 meseci
E hvala ti, mnogo je bolje rešenje nego ono moje. Imaću mali problem oko menjanja koda ostatka programa (jer ovde prvo vadim LSB) ali nije strašno.

Thnx.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Jel ovo greska u kompajleru ?

[ Pregleda: 3044 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.