Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Bit-Manipulation/test/IsPowerOfTwo.test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {IsPowerOfTwo} from '../IsPowerOfTwo'
import { IsPowerOfTwo } from '../IsPowerOfTwo'

test('Check if 0 is a power of 2 or not:', () => {
const res = IsPowerOfTwo(0)
Expand Down
59 changes: 59 additions & 0 deletions Conversions/BinaryToHex.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
const pad = (num, padlen) => {
var pad = new Array(1 + padlen).join(0)
return (pad + num).slice(-pad.length)
}

const hexLookup = (bin) => {
let binary = bin
if (binary.length < 4) {
binary = pad(binary, 4)
}
switch (binary) {
case '0000': return '0'
case '0001': return '1'
case '0010': return '2'
case '0011': return '3'
case '0100': return '4'
case '0101': return '5'
case '0110': return '6'
case '0111': return '7'
case '1000': return '8'
case '1001': return '9'
case '1010': return 'A'
case '1011': return 'B'
case '1100': return 'C'
case '1101': return 'D'
case '1110': return 'E'
case '1111': return 'F'
}
}
const binaryToHex = (binaryString) => {
/*
Function for convertung Binary to Hex

1. The conversion will start from Least Significant Digit (LSB) to the Most Significant Bit (MSB).
2. We divide the bits into sections of 4-bits starting from LSB to MSB.
3. If the MSB get less than 4 bits, then we pad 0s to the front of it.

For Example:
Binary String = '1001101'

1. Divide it to 2 parts => ['100', '1101']
2. Pad 0s the MSB so it'll be => ['0100', '1101']
3. Use the lookup table and merge them, therefore the result is 4D.

*/

let result = ''
binaryString = binaryString.split('')
for (let i = binaryString.length - 1; i >= 0; i = i - 4) {
if (i >= 3) {
result += hexLookup(binaryString.slice(i - 3, i + 1).join(''))
} else {
result += hexLookup(binaryString.slice(0, i + 1).join(''))
}
}
return result.split('').reverse().join('')
}

export default binaryToHex
5 changes: 2 additions & 3 deletions Conversions/TemperatureConversion.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,7 @@ const fahrenheitToRankine = (fahrenheit) => {
const kelvinToCelsius = (kelvin) => {
// Wikipedia reference: https://en.wikipedia.org/wiki/Kelvin
// Wikipedia reference: https://en.wikipedia.org/wiki/Celsius
return Math.round((kelvin) - 273.15)

return Math.round((kelvin) - 273.15)
}

const kelvinToFahrenheit = (kelvin) => {
Expand All @@ -53,7 +52,7 @@ const kelvinToFahrenheit = (kelvin) => {
const kelvinToRankine = (kelvin) => {
// Wikipedia reference: https://en.wikipedia.org/wiki/Kelvin
// Wikipedia reference: https://en.wikipedia.org/wiki/Rankine_scale
return Math.round(( (kelvin) * 9 / 5))
return Math.round(((kelvin) * 9 / 5))
}

const rankineToCelsius = (rankine) => {
Expand Down
19 changes: 19 additions & 0 deletions Conversions/test/BinaryToHex.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import binaryToHex from '../BinaryToHex'

describe('BinaryToHex', () => {
it('expects to return correct hexadecimal value', () => {
expect(binaryToHex('1000')).toBe('8')
})

it('expects to return correct hexadecimal value for more than one hex digit', () => {
expect(binaryToHex('11101010')).toBe('EA')
})

it('expects to return correct hexadecimal value for padding-required binary', () => {
expect(binaryToHex('1001101')).toBe('4D')
})

it('expects to return correct hexadecimal value, matching (num).toString(16)', () => {
expect(binaryToHex('1111')).toBe(parseInt('1111', 2).toString(16).toUpperCase())
})
})