Short int, Hexa Decimal and Binary bases in C

I'd like your help with analyzing the output of the following code:

int f(unsigned short x){
    int count;      
    for (count=0; x!=0; x>>=1){
        if (x & 1)
            count++;
    }
    return count;
}

int main(void){
    unsigned short x = 0x00ef;

    while (x){
        printf("%d", f(f(x)));
        x<<=4;
    }

    printf("\n");
    return 0;
}

I treat x as 239 or 11101111 in binary base.

so 11101111 != 0 so we enter the while loop: f(f(11101111)), then f's count reaches to 7: 11101111 to 01110111 to 00111011**to **00011101 to 00001110 and so on. we have 7 cases where (x&1!=0) then 00000111 is sent to f, and count is 3, 3 is being printed and the original number becomes 11110000 and sent to f, 4 is sent then to f, but then since 4 is 00000100 count=1 and then I expected 1 to be printed, but the output is 3331.

Can someone please point out my mistakes?

Answers


You seem to be expecting the original number to be limited at 8 bits, which is rarely the size of unsigned short.

After the first shift, x will hold 0x00ef << 4, i.e. 0x0ef0 which still has the same number of bits set.


Need Your Help

Load and replace image with same name - load and cache image problem

jquery setinterval

I am trying to load a image from the server (same name but always a new image) into the html page - tag: #webCamStageImage. So far I can load the image but the browser doesn't show me the new image...