decimal to hexadecimal Algorithm

The decimal to hexadecimal algorithm is a widely-used mathematical technique for converting a given decimal (base 10) number into its equivalent hexadecimal (base 16) representation. This conversion is commonly employed in computer science and digital electronics, as hexadecimal numbers are more compact and easier to read and manipulate than binary numbers, making them suitable for representing memory addresses, color codes, and other data types. The algorithm involves a series of repeated divisions and remainders, where the decimal number is divided by 16 and the remainder is recorded until the quotient becomes zero. The remainders, when read in reverse order, give the equivalent hexadecimal representation. To execute this algorithm, start by dividing the decimal number by 16 and note down the quotient and remainder. The remainder will be a value between 0 and 15, which corresponds to a hexadecimal digit (0-9 or A-F). Next, divide the quotient obtained in the previous step by 16 and again record the new quotient and remainder. Repeat this process until the quotient becomes zero. The hexadecimal representation of the original decimal number is formed by concatenating the remainders in reverse order. For instance, to convert the decimal number 4567 to hexadecimal, the remainders will be 7, 11 (B), and 1, yielding the hexadecimal number 1B7.
""" Convert Base 10 (Decimal) Values to Hexadecimal Representations """

# set decimal value for each hexadecimal digit
values = {
    0: "0",
    1: "1",
    2: "2",
    3: "3",
    4: "4",
    5: "5",
    6: "6",
    7: "7",
    8: "8",
    9: "9",
    10: "a",
    11: "b",
    12: "c",
    13: "d",
    14: "e",
    15: "f",
}


def decimal_to_hexadecimal(decimal):
    """
        take integer decimal value, return hexadecimal representation as str beginning with 0x
        >>> decimal_to_hexadecimal(5)
        '0x5'
        >>> decimal_to_hexadecimal(15)
        '0xf'
        >>> decimal_to_hexadecimal(37)
        '0x25'
        >>> decimal_to_hexadecimal(255)
        '0xff'
        >>> decimal_to_hexadecimal(4096)
        '0x1000'
        >>> decimal_to_hexadecimal(999098)
        '0xf3eba'
        >>> # negatives work too
        >>> decimal_to_hexadecimal(-256)
        '-0x100'
        >>> # floats are acceptable if equivalent to an int
        >>> decimal_to_hexadecimal(17.0)
        '0x11'
        >>> # other floats will error
        >>> decimal_to_hexadecimal(16.16) # doctest: +ELLIPSIS
        Traceback (most recent call last):
        ...
        AssertionError
        >>> # strings will error as well
        >>> decimal_to_hexadecimal('0xfffff') # doctest: +ELLIPSIS
        Traceback (most recent call last):
        ...
        AssertionError
        >>> # results are the same when compared to Python's default hex function
        >>> decimal_to_hexadecimal(-256) == hex(-256)
        True
    """
    assert type(decimal) in (int, float) and decimal == int(decimal)
    hexadecimal = ""
    negative = False
    if decimal < 0:
        negative = True
        decimal *= -1
    while decimal > 0:
        decimal, remainder = divmod(decimal, 16)
        hexadecimal = values[remainder] + hexadecimal
    hexadecimal = "0x" + hexadecimal
    if negative:
        hexadecimal = "-" + hexadecimal
    return hexadecimal


if __name__ == "__main__":
    import doctest

    doctest.testmod()

LANGUAGE:

DARK MODE: