C++ bitovni pomak kod različitih kompajlera

poruka: 4
|
čitano: 3.453
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
13 godina
neaktivan
offline
C++ bitovni pomak kod različitih kompajlera

Pozdrav,

 

Krećem u prvi razred srednje skole, i odnedavno se bavim programiranjem u slobodno vrijeme. Glavni izvor informacija mi je "Demistificirani C++" u kojem se na 67. str drugog izdanja knjige navodi: "Pri pomaku ulijevo najznačajniji (tj. kranji lijevi) bitovi se gube, dok najmanje značajni bitovi poprimaju vrijdnost 0. Slično, pri pomaku udesno, gube se najmanje značajni bitovi poprimaju vrijednost 0." Primijetio sam da na mom kompajleru (GNU GCC Compiler) to prema mojem mišljenju, nije istina. Pročitao sam ovaj članak pa sam zaključio da "Demifisticirani C++" opisuje tzv. Logical shift, a da moj kompajler, prema mojim testovima koristi tzv. Arithmetic shift koji cuva bit predznaka u slucaju desnog pomaka. Moje pitanje je: pošto nije prakticno da downloadam svaki kompajler i isprobavam, a zbog prenosivosti koda mi je potrebna informacija, netko od vas iskusnijih sigurno zna koriste li svi ili barem većina danasnjih kompajlera Arithmetic shift, a ako da, zašto "Demistificirani C++" daje pogrešnu informaciju? Unaprijed se ispričavam ako sam ja negdje zeznuo, isprika mi je što sam veliki početnik.

 

Unaprijed hvala!

A: Because it messes up the order in which people normally read text. Q: Why is it such a bad thing? A: Top-posting. Q: What is the most annoying thing on usenet and in e-mail?
 
0 0 hvala 0
14 godina
neaktivan
offline
C++ bitovni pomak kod različitih kompajlera

Nisi dobro shvatio kako pomak radi

int x = 6

u bin -> 00000000000000000000000000000110

x <<= 1

u bin -> 00000000000000000000000000001100

Tj. (x <<= 1) == (x *= 2)

 

ali recimo x = 6, x >>= 2

u bin -> 00000000000000000000000000000001

 

int je 32bitni broj i bitshift radi na svim kompajlerima isto

 

Poruka je uređivana zadnji put pet 19.8.2011 22:29 (Budimir).
 
0 0 hvala 0
13 godina
neaktivan
offline
C++ bitovni pomak kod različitih kompajlera

Hvala, ali sam shvatio to što si rekao, možda sam trebao biti precizniji.

 

Konkretno, kod negativnih int brojeva, bit za predznak je 1. Prema onome što sam citirao iz Demistificiranog je da bi pri desnom pomaku na mjesto najznacajnijeg bita bi trebala doci nula. Ali, moj kompajler koristi Arithmetic shift pa čuva najznacajniji bit (bit predznaka) i to je kod negativnih int brojeva jedinica, a ne 0. Ali si mi u posljednjoj rečenici svog posta odgovorio na pitanje, hvala :)

A: Because it messes up the order in which people normally read text. Q: Why is it such a bad thing? A: Top-posting. Q: What is the most annoying thing on usenet and in e-mail?
Poruka je uređivana zadnji put pet 19.8.2011 23:03 (XamaX).
 
0 0 hvala 0
17 godina
moderator
online
Re: C++ bitovni pomak kod različitih kompajlera
Budimir kaže...
int je 32bitni broj i bitshift radi na svim kompajlerima isto

Da, kod 32-bitnog kompajlera. S obzirom da polako, ali sigurno ulazimo u 64-bitno doba, valja napomenuti da je int kod 64-bitnog kompajlera veličine 64-bita (kod 16-bitnih, recimo u DOS-u ili Win 3.1, je 16 bitova).

1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice