Golgappa.net | Golgappa.org | BagIndia.net | BodyIndia.Com | CabIndia.net | CarsBikes.net | CarsBikes.org | CashIndia.net | ConsumerIndia.net | CookingIndia.net | DataIndia.net | DealIndia.net | EmailIndia.net | FirstTablet.com | FirstTourist.com | ForsaleIndia.net | IndiaBody.Com | IndiaCab.net | IndiaCash.net | IndiaModel.net | KidForum.net | OfficeIndia.net | PaysIndia.com | RestaurantIndia.net | RestaurantsIndia.net | SaleForum.net | SellForum.net | SoldIndia.com | StarIndia.net | TomatoCab.com | TomatoCabs.com | TownIndia.com
Interested to Buy Any Domain ? << Click Here >> for more details...

value = 0xabcd;
for (loop = 1; (value >> 1) & 1 | loop & 1; loop++) {
foo();
if (loop & 1)
value >>= 1;
}

how many times is foo() executed?

Answer Posted / jaroosh

This is a very neat example of program where you need to
note some interesting things about values in order to easily
estimate how many times it will be executed.
So, here it goes
0. first of all, were looking for the value of LOOP for
which (value >> 1) & 1 | loop & 1 will be false.
1. loop variable in for loop will sequentially take values
that are :
odd (1), even (2), odd (3), even (4) ...etc
so (loop & 1) part of for loop condition will sequentially
take values:
true(loop=1), false(loop=2),true,false...etc
2. the only thing to figure now is how (value >> 1) & 1 part
will behave. It is a good choice to convert hex abcd to bit
pattern, so we will have 1010101111001101
now only thing we have to do is see what will the boolean
part of condition will initially be:
1010101111001101 >> 1 = 101010111100110
101010111100110 & 1 = 0
initially, the (value >> 1) & 1 part is then FALSE.
3. now, we only have see 3 things:
a) in for loop body there is :
if (loop & 1)
value >>= 1;
so EVERY TIME loop condition : (loop & 1) is TRUE (as we've
noticed earlier for each loop iteration, it has sequentially
values : true, false, true, false, true, false..etc),
we CHANGE the value of '(value >> 1) & 1' part of condition
to its opposite (if it was FALSE, it becomes true)
b) were looking for the situation where both parts of
condition will be false, so all we have to do now is write
down how those parts behave starting from loop = 1.

LOOP PART : true , false , true , false , true , false(!)
OTHER PART: false , true, true, true, false , FALSE(!)

since we have FALSE and FALSE in both parts of for
condition, the for loop ends.
Now, we count how many times the for loop body (and so - foo
function) executed. Right, it IS 5.

It may sound a bit complicated, but this shows the way how
to solve algorithm problems that sound complicated at first
and use bit patterns (on interviews, no-one expects you to
do complicated binary/hex equatations in memory, you only
have to note some things, and simplify).

Is This Answer Correct ?    4 Yes 0 No



Post New Answer       View All Answers


Please Help Members By Posting Answers For Below Questions

write a program to input 10 strings and compare without using strcmp() function. If the character of one string matches with the characters of another string , sort them and make it a single string ??? example:- str1="Aakash" st2="Himanshu" str="Uday" output:- Aakashimanshuday (please post the answer as quickly as possible)

2102


When should we use pointers in a c program?

1132


What are the header files used in c language?

1055


Find MAXIMUM of three distinct integers using a single C statement

1066


Is c a great language, or what?

1114


How do I round numbers?

1008


What is #define in c?

1048


What are the different types of data structures in c?

1166


What is the difference between near, far and huge pointers?

1097


what is the basis for selection of arrays or pointers as data structure in a program

4309


Using which language Test cases are added in .ptu file of RTRT unit testing???

4281


What is break in c?

1028


Why do we need functions in c?

1020


Can a variable be both const and volatile?

1130


What is meant by preprocessor in c?

1014