Hi all.
In this article (link : http://www.geeksforgeeks.org/divisibility-9-using-bitwise-operators/ )
it is written that (n%8) is equal to (int)(n&7) ( in the function bool isDivBy9(int n) ).
Can someone explain how this is correct?
Hi all.
In this article (link : http://www.geeksforgeeks.org/divisibility-9-using-bitwise-operators/ )
it is written that (n%8) is equal to (int)(n&7) ( in the function bool isDivBy9(int n) ).
Can someone explain how this is correct?
source: same page
How does this work?
n/9 can be written in terms of n/8 using the following simple formula.
n/9 = n/8 - n/72
Since we need to use bitwise operators, we get the value of floor(n/8) using n>>3 and get value of n%8 using n&7. We need to write above expression in terms of floor(n/8) and n%8.
n/8 is equal to “floor(n/8) + (n%8)/8″. Let us write the above expression in terms of floor(n/8) and n%8
n/9 = floor(n/8) + (n%8)/8 - [floor(n/8) + (n%8)/8]/9
n/9 = floor(n/8) - [floor(n/8) - 9(n%8)/8 + (n%8)/8]/9
n/9 = floor(n/8) - [floor(n/8) - n%8]/9
From above equation, n is a multiple of 9 only if the expression floor(n/8) – [floor(n/8) - n%8]/9 is an integer. This expression can only be an integer if the sub-expression [floor(n/8) - n%8]/9 is an integer. The subexpression can only be an integer if [floor(n/8) - n%8] is a multiple of 9. So the problem reduces to a smaller value which can be written in terms of bitwise operators.
0110
i.e. 6.
Thanx.But i was asking about this part only : (n%8) is equal to (int)(n&7) ( in the function bool isDivBy9(int n) ).I want to know how this is correct.
Thanx a lot.