Citat:
voodoo_ kaže:
Problem možeš da rešiš tako što ćeš da "zezneš" kompajler i broj prethodno kastuješ u unsigned (odnosno kažeš mu da memorijsku lokaciju X tretira kao unsigned int):
Kod:
int brojBita(int x)
{
unsigned int ux = (unsigned int) x;
int broj = 0;
while (ux) {
if (ux & 0x1) {
broj++;
}
ux >>= 1;
}
return broj;
}
|
Ovo sam probao i daje tačan rezultat, ali mi nije jasno kako. Zar se, jednostavno, promenljivoj ux ne doda nenegativna vrednost i onda je njen binarni zapis, zapis za pozitivne brojeve i nulu (mada koliko znam i nula se može zapisati u komplementu dvojke)?
Što se tiče prvog saveta, kada sam dodao printf, ako bih funkciji dao negativan broj, samo sam dobijao ispis sa osam f-ova, i to unedogled. Da li je to trebalo da bude tako?