martin_riggs nezaposlen Beograd
Član broj: 303016 Poruke: 7 *.dynamic.isp.telekom.rs.
|
Pozdrav narode.Kopiracu resen zadatak u C++ 2010 koji sam odradio, sve mi je jasno sta radi ali mi nije jasna logika.
for(i=0;i<n;i++) // 0 , 1 , 2 , 3 ...
{
maska = maska | (1<<i) ; // Maska za izmenu prvih "n" bitova...
printf("\n maska %d ", maska);
}
Jasno mi je kako se formira maska, za i = 0 maska ce biti 1, za i = 1 maska je 3 , i = 2 maska je 7 , shvatam da se maska uvecava po sledecem modelu maska = 2 * prethodna maska + 1 ali ne mogu da uhvatim logiku zasto i kako.
Zatim sledeci korak mi je jos manje jasan...kad program radi ovo :
for(i=0;i<n;i++) // 0 , 1 , 2 , 3 ...
{
maska = maska | (1<<i) ; // Maska za izmenu prvih "n" bitova...
}
y = (x ^ maska) & maska ; // Prvo izmena prvih n bitova pa onda 0 i za ostale...
E sad ako moze jedno strucno ali detaljno i podrobno objasnjenje koga ne mrzi da kuca a ja se unapred zahvaljujem!
PS : Ovo mi treba za ispit, jos mi jedino ovo nije jasno od provezbanih zadataka zato narode ako neko zna i ne mrzi ga da kuca ziv bio nek mi malo pojasni!
Ceo zadatak :
----------------------------------------------------------------------------------------------------------
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int x,y,l,i,n, maska = 0;
printf("Jedan ceo broj : "); // neka bude broj 12
scanf_s("%d", &x);
l = 8*sizeof(int);
do
{
printf("Drugi ceo broj (redni broj bita u prvom broju) : " );
scanf_s("%d", &n) ; // neka bude prvih 6 bitova...dobija se 51.
}
while(n<1 || n>l) ;
for(i=0;i<n;i++) // 0 , 1 , 2 , 3 ...
{
maska = maska | (1<<i) ; // Maska za izmenu prvih "n" bitova...
}
y = (x ^ maska) & maska ; // Prvo izmena prvih n bitova pa onda 0 i za ostale...
printf("\n Brojevi x i y : %d %d " , x,y) ;
printf("\n Brojevi x i y u heksa obliku : %x %x " , x,y) ;
scanf_s("%d", &x);
return 0;
}
|