[ nenadnesta @ 10.12.2010. 22:59 ] @
#include <stdio.h>
main()
{ int c, broj2=0;

printf("\n\nZadati neki drugi broj od 2B u binarnom obliku: ");
while((c=getchar()) != '\n')
broj2 = broj2*2 + (c-'0');
printf("Zadati broj u decimalnom obliku: %d\n", broj2);

ako bi neko mogao da pojasni naredbu

broj2 = broj2*2 + (c-'0');

sta znaci ovo (c-'0') ?

[ Mihajlo Cvetanović @ 11.12.2010. 00:22 ] @
Kad uneseš neku cifru ta cifra je u rasponu od '0' do '9' (obrati pažnju na navodnike), ili potpuno istovetno ovome u rasponu od 48 do 57 (ovog puta bez navodnika). Stvar je u tome što je u programskom jeziku C svaki char istovremeno i broj i znak, pa tako znak '0' (u takozvanoj ASCII tabeli) ima vrednost 48. Izraz c - '0' (ili ekvivalentno c - 48) će pretvoriti znak u vrednost tog znaka, recimo ako je c=='5' onda je c - '0' == 5 (bez navodnika).
[ pajaja @ 11.12.2010. 00:41 ] @
Pozdrav,

ne znam da li ti nije jasan algoritam za dobijanje binarnog broja ili samo c-'0' deo?

U svakom slucaju:
U C-u se char predstavlja jednim bajtom i imaju ASCII vrednosti (0-255). Kada procitas sa ulaza neki karakter sa c=getchar() ( recimo 1 ), promenljiva c dobije vrednost 49 (ASCII vrednost 1). Posto zelis da saznas da li je uneta 0 ili 1 (ascii 48 ili 49), nacin za to je da oduzmes 48 od karaktera koji je procitan sa ulaza i ono sto ti ostane je uneta cifra. Da ne bi morao da pamtis koji karakter se kako koduje ASCII kodom, mozes da da koristis '0' i to ce biti interpretirano kao ASCII vrednost karaktera 0 (sto je 48).


/edit: Pretece me Mihajlo dok sam vecerao :) Moze da se obrise post.
[ nenadnesta @ 11.12.2010. 12:13 ] @
e, hvala ljudi, sada je sve mnogo jasnije...
nego kad smo vec kod ovih konverzija imam jos jednu nedoumicu:
ona se tice prebacivanja sada iz decimalnog u binarni broj...

#include <stdio.h>
main() {
short dec, i, bit;

while(1) {
printf("decimalni broj?");
scanf("%hd, &dec");

if(dec==9999) break;

printf("binarni broj:");

for(i=1; i<=16; i++)
{
bit=(dec&0x8000)!=0;

printf ("%d",bit);
if(i%4==0) printf(" ");

dec<<=1;
}

printf ("\n");
}
}

da li se ucitani decimalni broj kada se ubaci u izraz bit=(dec&0x8000)!=0;
automatski konvertuje u binarni oblik s obzirom na operator za manipulaciju nad bitovima & ?
i ako moze dalje pojashnjenje bit=(dec&0x8000)!=0; izraza,
promenljivoj bit dodeljuje se neka vrednost, zashto stoji razlichito od nula za izraz u zagradama ?
[ Mihajlo Cvetanović @ 11.12.2010. 12:59 ] @
Ne znam da li je ovo striktno po standardu, ali bilo koji logički izraz ima kao rezultat nulu ako nije istinit ili jedinicu ako jeste. Možda C standard ovde kaže "različito od nule" za istinit izraz, to ne znam, ali dati kod se oslanja na to da je zaista u pitanju "jedinica". Ispitivanje da li je neka vrednost različita od nule je jedan takav logički izraz. Rezultat operacije (dec & 0x8000) != 0 će zato biti nula ako je dec & 0x8000 nula, a biće jedinica ako dec & 0x8000 nije nula. Izraz dec & 0x8000 neće biti nula samo ako u najjačem bitu promenljive dec stoji jedinica. Promenljiva bit će stoga dobiti vrednost 0 ili 1, i to će se dešavati u petlji 16 puta. Svaki put se ispisuje promenljiva bit (ali svaki put s novom vrednošću, zbog onog dec<<=1 na kraju petlje), a to na ekranu prividno izgleda kao da je ispisan ceo broj u binarnoj formi.