def int_bytes_to_programmatic_units(byte_value):
    """Convert a byte count into OVF-style bytes + multiplier.

    Inverse operation of :func:`programmatic_bytes_to_int`

    Args:
      byte_value (int): Number of bytes

    Returns:
      tuple: ``(base_value, programmatic_units)``

    Examples:
      ::

        >>> int_bytes_to_programmatic_units(2147483648)
        ('2', 'byte * 2^30')
        >>> int_bytes_to_programmatic_units(2147483647)
        ('2147483647', 'byte')
        >>> int_bytes_to_programmatic_units(134217728)
        ('128', 'byte * 2^20')
        >>> int_bytes_to_programmatic_units(134217729)
        ('134217729', 'byte')
    """
    shift = 0
    byte_value = int(byte_value)
    while byte_value % 1024 == 0:
        shift += 10
        byte_value /= 1024
    byte_str = str(int(byte_value))
    if shift == 0:
        return (byte_str, "byte")
    return (byte_str, "byte * 2^{0}".format(shift))