Solution (source code)

= Solution

Extract one four-bit digit at a time, beginning at the most significant end of the <Java> `int`. A lookup string supplies characters, but no library performs the conversion:
``
java
static String toHex(int value) {
    String digits = "0123456789abcdef";
    String answer = "";
    boolean started = false;
    for (int shift = 28; shift >= 0; shift -= 4) {
        int digit = (value >>> shift) & 15;
        if (started || digit != 0 || shift == 0) {
            answer = answer + digits.charAt(digit);
            started = true;
        }
    }
    return answer;
}
``
The logical right <bit shift> `>>>` inserts zeros, and the <bit mask> `15` retains exactly the low four bits of the shifted word. Each emitted character is therefore the corresponding <hexadecimal> digit. The `started` flag suppresses leading zero digits; the `shift == 0` exception makes zero produce \b[`"0"`], rather than an empty string.

A negative <Java> integer uses <two's complement>. Its top bit is set, so the first extracted digit is between eight and fifteen and all eight digits are emitted. We interpret its original 32-bit pattern, without taking an absolute value or negating a potentially unnegatable minimum integer. In particular, \b[`toHex(19)` returns `"13"`, `toHex(-1)` returns `"ffffffff"`, and `toHex(Integer.MIN_VALUE)` returns `"80000000"`.] There are exactly eight iterations, so for this fixed word size the <time complexity> is constant.