Code:
#include <stdio.h>

int display_binary(unsigned short number);


int main()
{
    unsigned short number;


    printf("Enter a whole number between 0 and 65,535: ");
    scanf("%hu", &number);


    printf("\n\n    Decimal: %hu\n", number);
    printf("Hexadecimal: %x\n", number);


    display_binary(number);


    getch();
    return 0;
}


int display_binary(unsigned short number)
{
    unsigned short mask = 0x8000;
    int c, k;


    for(c = 0; c < 16; c++)
    {
        k = (number & mask);
        if(k == 0)
            printf("0");
        else
            printf("1");


        mask >> 1;


        if(c == 3 || c == 7 || c == 11)
            printf(" ");
    }
}
OK, I know that I am not supposed to just blatantly ask questions for homework, but I can't seem to figure this out... Here is what I was told to do:
Hint: Declare an unsigned short mask = 0x8000 (which is 1000 0000 0000 0000). Write a for loop that iterates 16 times. In each cycle, do a bitwise & between the mask and the input parameter. Display 0 if the outcome is 0 and 1 otherwise. Shift the mask to the right one bit at the end of each cycle to retrieve the next bit in the next cycle. Display a space character after every 4 bits of data to improve readability.
My problem is, that I am getting the binary to be all "1's" for everything I put in. I think I am doing what is instructed, but obviously not.

Thanks in advance for any help,
~Alan