[ roy_ @ 13.01.2007. 19:06 ] @
Pozdrav, naisao sam na problem kod koristenja nekih api-a!
kada na msdnu pise za return value npr. 'if the most significant bit is set then...' ili 'if the least significant bit is set then...', moze li mi itko objasniti kako provjeriti takav return value ili dati neki link gdje bi vise mogao procitati o tome..

hvala unaprijed!
[ X Files @ 13.01.2007. 22:29 ] @
Prvo treba da utvrdiš veličinu te povratne vrednosti, tj. da li je 16-bitna, 32-bitna, i sl.

Recimo da je 16 bitna.

1000000000000000 <--- most significant bit
0000000000000001 <--- least significant bit

...tvoj zadatak je da proveris da li je postavljen recimo "most significant bit":

1000000000000000 binarno == 8000 hex

Code:

if ( x & 0x8000 ) // <--- x je povratna vrednost API-ja
{
   // jeste most // <--- primeti da se proverava samo prvi bit, i da ce se u ovaj blok doci cak i kada je vrednost recimo 1100000000000000
}
else
{
   // nije most
}

...za "least signifficant" koristi 0x0001.

Postoje i drugaciji nacini ispitivanje ovoga sa obicnim vece, manje, pa cak i sa shiftovanjem,
ali ovo je jedno od resenja.

U svakom slucaju, prouci poglavlje gde se pominje binarna aritmetika.



[Ovu poruku je menjao X Files dana 13.01.2007. u 23:48 GMT+1]
[ rumpl @ 13.01.2007. 22:46 ] @
Ako je 'if the least significant bit is set then...' onda je to neki pozitivan broj
Ako je 'if the most significant bit is set then...' onda je to neki negativni broj

Na primer:
INT_MAX = 11111111111111111111111111111110 = 2147483647
INT_MAX = 2^0*1 + 2^1*1 + .... + 2^32*0
INT_MIN = 00000000000000000000000000000001 = -2147483648
INT_MIN = 2^0*0 + .... + 2^32*1

Evo ti jedan mali program napisan na brzaka koji ti omogucava da vidis bilo koji broj u binarnom obliku:
Code:

#include <stdio.h>
#include <limits.h>

#define TEST_BIT(num, x) (num & (1 << (x - 1))) ? 1:0

int main()
{
  int i;
  int max = INT_MAX;
  int min = INT_MIN;

  for(i = 1; i <= 32; i++)
    printf("%d", TEST_BIT(max, i));

  printf("\n%d\n", max);

  for(i = 1; i <= 32; i++)
    printf("%d", TEST_BIT(min, i));

  printf("\n%d\n", min);

  return(0);
}
[ pajac @ 14.01.2007. 19:26 ] @
Hehe, sa time sam se ja zezo kod sistemskog programiranja na unixu :)

Kad sam 1put učio C, "preskočio" sam to poglavje i mislio, da mi neče nikad trebat.E, pa malo sam se zenuo :))
[ roy_ @ 14.01.2007. 21:57 ] @
puno hvala na odgovorima!
sve je jasno ;)
[ alexione @ 22.01.2007. 00:31 ] @
Samo mala ispravka:

Citat:
Ako je 'if the least significant bit is set then...' onda je to neki pozitivan broj


ne mora obavezno da znaci... recimo 0x11111111 (32x1) je -1 iako ima 'least significant bit set'

Citat:
Ako je 'if the most significant bit is set then...' onda je to neki negativni broj


yeya! :)
[ rumpl @ 22.01.2007. 19:29 ] @
@alexione
Tacno, bas sam glup ponekad...

Ispravka:
'if the most significant bit is NOT set then...' onda je to neki pozitivan broj