Base-2 in Java

The challenge

In this challenge you must convert integers numbers from and to a negative-base binary system.

Negative-base systems can accommodate all the same numbers as standard place-value systems, but both positive and negative numbers are represented without the use of a minus sign (or, in computer representation, a sign bit); this advantage is countered by an increased complexity of arithmetic operations.

To help understand, the first eight digits (in decimal) of the Base(-2) system is:

[1, -2, 4, -8, 16, -32, 64, -128]

Example conversions:

Decimal, negabinary

6, '11010' -6, '1110' 4, '100' 18, '10110' -11, '110101'
Code language: JavaScript (javascript)

The solution in Java code

Option 1:

public class Solution { public static String intToNegabinary(int i) { return Integer.toBinaryString((i+0xAAAAAAAA)^0xAAAAAAAA); } public static int negabinaryToInt(String s) { return s.chars().map(i->i-'0').reduce(0,(a,v)->v-2*a); } }
Code language: Java (java)

Option 2:

public class Solution { public static String intToNegabinary(int i) { var sb = new StringBuilder(); while (i != 0) { int remainder = Math.abs(i) % 2; sb.append(remainder); if (i < 0 && remainder > 0) i--; i /= -2; } var result = sb.reverse().toString(); return result.isEmpty() ? "0" : result; } public static int negabinaryToInt(String s) { var strReversed = new StringBuilder(s).reverse(); int result = 0; for (int i = 0; i < strReversed.length(); i++) if (strReversed.charAt(i) == '1') result += Math.pow(-2, i); return result; } }
Code language: Java (java)

Option 3:

public class Solution { public static String intToNegabinary(int i) { return Integer.toUnsignedString(toNegabinary(i), 2); } public static int negabinaryToInt(String s) { return fromNegabinary(Integer.parseUnsignedInt(s, 2)); } public static int toNegabinary(int i) { return (i + NEGATIVE_DIGITS) ^ NEGATIVE_DIGITS; } public static int fromNegabinary(int i) { return (i ^ NEGATIVE_DIGITS) - NEGATIVE_DIGITS; } private static final int NEGATIVE_DIGITS = 0xAAAAAAAA; }
Code language: Java (java)

Test cases to validate our solution

import org.junit.Test; import static org.junit.Assert.assertEquals; public class SolutionTest { @Test public void testIntToNegabinary() { assertEquals("11010", Solution.intToNegabinary(6)); assertEquals("1110", Solution.intToNegabinary(-6)); } @Test public void testNegabinaryToInt() { assertEquals(6, Solution.negabinaryToInt("11010")); assertEquals(-6, Solution.negabinaryToInt("1110")); } }
Code language: Java (java)
Tags:
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments