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

Jel ovo greska u kompajleru ?

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

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

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Ivan Vasić
Ivan Vasić
Nis

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

Jabber: ivasic@elitesecurity.org


Profil

icon Jel ovo greska u kompajleru ?03.03.2004. u 22:44

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
03.03.2004. u 22:44 

NastyBoy
Bojan Nastic
UK

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



Profil

icon Re: Jel ovo greska u kompajleru ?03.03.2004. u 22:55
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
03.03.2004. u 22:55 

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
Laptopovi

probaj sa long int
koliko ja znam unsigned int range je 0-FFFF
03.03.2004. u 22:58 

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


Profil

icon Re: Jel ovo greska u kompajleru ?03.03.2004. u 22:59
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

03.03.2004. u 22:59 

Reljam
Relja Markovic
San Francisco

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



Profil

icon Re: Jel ovo greska u kompajleru ?04.03.2004. u 00:23
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.
04.03.2004. u 00:23 

Ivan Vasić
Ivan Vasić
Nis

Č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
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 ....
04.03.2004. u 10:00 

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


Profil

icon Re: Jel ovo greska u kompajleru ?04.03.2004. u 10:06
"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

04.03.2004. u 10:06 

Ivan Vasić
Ivan Vasić
Nis

Č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
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 !
04.03.2004. u 10:30 

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


Profil

icon Re: Jel ovo greska u kompajleru ?04.03.2004. u 11:02
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

04.03.2004. u 11:02 

Ivan Vasić
Ivan Vasić
Nis

Č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
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 ?
05.03.2004. u 13:28 

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


Profil

icon Re: Jel ovo greska u kompajleru ?05.03.2004. u 13:44
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
05.03.2004. u 13:44 

Ivan Vasić
Ivan Vasić
Nis

Č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
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.
06.03.2004. u 11:32 

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

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

Postavi temu Odgovori

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