File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ import multiplyUnsigned from '../multiplyUnsigned' ;
2+
3+ describe ( 'multiplyUnsigned' , ( ) => {
4+ it ( 'should multiply two unsigned numbers' , ( ) => {
5+ expect ( multiplyUnsigned ( 0 , 2 ) ) . toBe ( 0 ) ;
6+ expect ( multiplyUnsigned ( 2 , 0 ) ) . toBe ( 0 ) ;
7+ expect ( multiplyUnsigned ( 1 , 1 ) ) . toBe ( 1 ) ;
8+ expect ( multiplyUnsigned ( 1 , 2 ) ) . toBe ( 2 ) ;
9+ expect ( multiplyUnsigned ( 2 , 7 ) ) . toBe ( 14 ) ;
10+ expect ( multiplyUnsigned ( 7 , 2 ) ) . toBe ( 14 ) ;
11+ expect ( multiplyUnsigned ( 30 , 2 ) ) . toBe ( 60 ) ;
12+ expect ( multiplyUnsigned ( 17 , 34 ) ) . toBe ( 578 ) ;
13+ expect ( multiplyUnsigned ( 170 , 2340 ) ) . toBe ( 397800 ) ;
14+ } ) ;
15+ } ) ;
Load Diff This file was deleted.
Original file line number Diff line number Diff line change 1+ /**
2+ * Multiply to unsigned numbers using bitwise operator.
3+ *
4+ * The main idea of bitwise multiplication is that every number may be split
5+ * to the sum of posers of two:
6+ *
7+ * I.e. 19 = 2^4 + 2^1 + 2^0
8+ *
9+ * Then multiplying number x by 19 is equivalent of:
10+ *
11+ * x * 19 = x * 2^4 + x * 2^1 + x * 2^0
12+ *
13+ * Now we need to remember that (x * 2^4) is equivalent of shifting x left by 4 bits (x << 4).
14+ *
15+ * @param {number } number1
16+ * @param {number } number2
17+ * @return {number }
18+ */
19+ export default function multiplyUnsigned ( number1 , number2 ) {
20+ let result = 0 ;
21+
22+ // Let's treat number2 as a multiplier for the number1.
23+ let multiplier = number2 ;
24+
25+ // Multiplier current bit index.
26+ let bitIndex = 0 ;
27+
28+ // Go through all bits of number2.
29+ while ( multiplier !== 0 ) {
30+ // Check if current multiplier bit is set.
31+ if ( multiplier & 1 ) {
32+ // In case if multiplier's bit at position bitIndex is set
33+ // it would mean that we need to multiply number1 by the power
34+ // of bit with index bitIndex and then add it to the result.
35+ result += ( number1 << bitIndex ) ;
36+ }
37+
38+ bitIndex += 1 ;
39+ multiplier >>= 1 ;
40+ }
41+
42+ return result ;
43+ }
You can’t perform that action at this time.
0 commit comments