Sprzeczne typy w C, dlaczego?

Próbuję napisać podstawową praktykę z C, pracując z Binary i Hex. Zrobiłem metodę wydrukowania wielokrotności 2 (potęgi 2) i oddzielnej metody drukowania formy Hex tej wielokrotności 2.

#include <stdlib.h>
#include <stdio.h>

const char one = 1;
const int bits = 31;

void    print2       ()
{
    unsigned int  u = (int)one;
    unsigned int j;

    printf("The powers of 2 are:\n");

    for(j=0;j<bits;j++)
    {
            unsigned int temp = u<<j;
            printf("%d\n",abs(temp));
            printhex(temp);
    }

    printf("\n\n");
}

void    printhex       (unsigned int   u)
{
    printf("0x%08X\n",u);
}

int main ()
{
    print2();
    return(EXIT_SUCCESS);
}

Czego nie rozumiem, to dlaczego dostaję błąd „sprzeczne typy” z wywołaniem metody „printHex”. W szczególności pytam o liczbę całkowitą bez znaku, a gdy wywołam metodę w parametrze (co zakładam, że jest to liczba całkowita bez znaku „temp”), kompilator nie akceptuje.

questionAnswers(2)

yourAnswerToTheQuestion