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

prikaz broja bajt po bajt u heksadecimalnom obliku

[es] :: C/C++ programiranje :: prikaz broja bajt po bajt u heksadecimalnom obliku

[ Pregleda: 2157 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

nenadnesta
Nenad Stojkovic
student

Član broj: 263759
Poruke: 23
212.200.65.*



Profil

icon prikaz broja bajt po bajt u heksadecimalnom obliku12.07.2010. u 17:19 - pre 167 meseci
evo jednog kratkog programa koji treba da prikaze zadati broj velicine 4 bajta, bajt po bajt pocevsi od bajta najmanje tezine:

#include <stdio.h>
#define MASKA 0xff
main()
{ int i;
long broj;
printf("\nBroj u heksadecimalnom obliku?");
scanf("%lx", &broj);
for(i=0;i<4;i++)
printf( "\n%#x", ( broj >> (8*i)) & MASKA );
}

program je korektan tj.radi a ja bih voleo da neko prokomentarise naredbu ( broj >> (8*i)) & MASKA )
naime, broj velicine 4B se prvo pomera udesno zbog veceg prioriteta a zatim se izvodi operacija & (logicko I) broja velicine 4B i maske velicine 1B, zasto je konacan rezultat ove naredbe broj velicine 1B? ako moze neko da objasni kroz brojevni primer !


 
Odgovor na temu

Picsel
Beograd

Član broj: 39817
Poruke: 440
*.dyn.ravangrad.net.



+7 Profil

icon Re: prikaz broja bajt po bajt u heksadecimalnom obliku13.07.2010. u 22:53 - pre 167 meseci
Uzmimo da je broj koji unosimo velicine 4 bajta i neka je to recimo 2A35CD87.
Binarno je to
00101010001101011100110110000111

Maska je FF, odnosno binarno 11111111. Ovaj broj se posmatra kao 4 bajta, zato sto je dat kao konstanta, a brojne konstante se interpretiraju kao brojevi od 4 bajta (da je tipa char, odnosno velicine 1 bajt, prica bi bila malo drugacija i program ne bi korektno radio). Kad posmatramo ovaj broj kao 4 bajta, to je 000000FF, sto je binarno
00000000000000000000000011111111

Bitwise AND poredi dva bita na istoj poziciji (i to radi za sve 32 pozicije 4-bajtnog broja). Ukoliko su oba bita 1, vrednost je 1, inace je 0.

1. korak iteracije - uneti broj se pomera za 0 mesta u desno i zatim se radi bitwise AND izmedju tog broja i maske
Code:

00101010001101011100110110000111
00000000000000000000000011111111
------------------------------------
00000000000000000000000010000111


Dobijeni rezultat se poklapa sa poslednjim bajtom (poslednjih 8 bitova), jer ove nule u maski rezultuju nulama u resenju.

2. korak iteracije - uneti broj pomera se za 8 mesta u desno, dok se na prvih 8 mesta dodaje 8 nula
Code:

00000000001010100011010111001101
00000000000000000000000011111111
------------------------------------
00000000000000000000000011001101


3. korak iteracije - kao prethodni, samo sto se pomera za 16 pozicija i dodaje se 16 nula
Code:

00000000000000000010101000110101
00000000000000000000000011111111
------------------------------------
00000000000000000000000000110101


4. korak iteracije
Code:

00000000000000000000000000101010
00000000000000000000000011111111
------------------------------------
00000000000000000000000000101010


Sam rezultat ove operacije nije velicine 1 bajt, vec 4 bajta, ali nule u prva tri bajta ne uticu na rezultat, odnosno, isti je broj. Printf ne ispisuje vodece nule kod heksadecimalnih brojeva, kao sto ne ispisuje ni kod decimalnih.

[Ovu poruku je menjao Picsel dana 14.07.2010. u 00:06 GMT+1]

[Ovu poruku je menjao Picsel dana 14.07.2010. u 00:07 GMT+1]
 
Odgovor na temu

nenadnesta
Nenad Stojkovic
student

Član broj: 263759
Poruke: 23
212.200.65.*



Profil

icon Re: prikaz broja bajt po bajt u heksadecimalnom obliku15.07.2010. u 15:50 - pre 167 meseci
tako jasan i dobar odgovor .
Hvala puno !
 
Odgovor na temu

[es] :: C/C++ programiranje :: prikaz broja bajt po bajt u heksadecimalnom obliku

[ Pregleda: 2157 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

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