Citat:
passanger je napisao:
Knjiga iz koje ucim bolje objasnjava neke stvari od ostalih knjiga ali neke vazne stvar objasnja samo jednim kratkim primerom. Kao sto je npr. slucaj sa maskama. Naime kaze ovako _bio_equiplist vraca unsigned gde je 0 Disk jedinica prisutna
1 Prisutan koprocesor
2-3 RAM u blokovima od 16K
4-5 Inicijalni video rezim
...
8-11 Broj serijskih prikljucaka
12 Prisutan adapter za video igre
13 Prisutan unutrasnji modem
14-15 Broj stampaca
Dat je primer:
#define MODEM 0x4000
void main(void)
{
unsigned online_equip;
online_equip = _bios_equiplist();
if (online_equip & MODEM)
cout << "Interni modem instaliran.n";
else
cout << "interni modem nije instaliran.n";
}
I dalje kaze da je sam postavljeni bit 13, binarno 100000000000000, sto je hexadecimalno 4000.
E sada:
1. Kakav je to tip unsigned? Do sada sam koristio unsigned int, ili float ili char ... ali samo unsigned nisam do sada koristio.
2. Ovo je tacno da je 13 hexadecimalno 4000 ali meni nije jasno, jer se bitovi broje od nule tako da bi trebalo da 13-i bit bude za broj manje, odnosno 8192=(16)2000, a ne 16384=(16)4000.
3. Da li sam ovo dobro razumeo. Operator I NAD BITOVIMA do sada isto nisam mnogo koristio pa me interesuje da li: if (online_equip & MODEM) znaci da u broju online_equip nadje 13 bit na koji pokazuje simbolicka promenljiva MODEM i da onda ispita da li je 1 TACNO ili 0 NETACNO. Da li sam ovo dobro razumeo odnosno da li je to tako?
Poz.
Unsigned ti nije tip to ti je ko neki modifikator koji ti ide uz tip, i koji kazuje da nepostoji bit za znak. Nisam radio sa C++ i tim online_equip ali verovatno kad napises samo unsigned on podrazumeva unsigned int ili tako nesto.
ovo pod 2. nisam bas razumeo.
>I dalje kaze da je sam postavljeni bit 13, binarno 100000000000000, sto je >hexadecimalno 4000.
cini mi se da si napisao mnogo nula.
13 heksadecimano nije NIKAKO 4000 decimanlo vec je 13h=19
moras malo da naucis o binarnom i hex sistemima.
if (online_equip & MODEM), operator & tije je BITwise AND tablica istinosti & je:
1 1|1
------
1 0|0
------
0 1|0
------
0 0|0
kao sto vidis tacno je samo kad su oba tacna. Evo primera:
kad imas broj 13 (binarno 1101) i hoces da vidis da li je najvisi bit 0 ili jedan ti uradis ovako
13 & 0x08
ovo ce biti tacno ako je najvisi bit ukljucen odnosno netacno ako je iskljucen:
1101=13
1000=08
-------------
1000=08 sto je tacno
kao sto vidis na svaki bit se ona tablica istinosti da bi video rezultat.
Znaci odgovor na tvoje pitanje 3. je DA.
poz.