Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 2 odgovora
  • 3.039 pregleda

Najnovija ↓

prikaz broja bajt po bajt u heksadecimalnom obliku 12.07.2010. u 18:19 · pre 198 meseci #1
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 !


Re: prikaz broja bajt po bajt u heksadecimalnom obliku 13.07.2010. u 23:53 · pre 198 meseci
izmenjeno 2 puta, poslednji put Picsel 14.07.2010. u 00:07
  1. Picsel14.07.2010. u 00:07zapis iz teksta poruke
  2. Picsel14.07.2010. u 00:06zapis iz teksta poruke
#2
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.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme