开发者

unable to make out how ~ operator works in c

开发者 https://www.devze.com 2022-12-20 07:19 出处:网络
I have this piece of code can you explain me the output unsigned int x=3; ~x; printf(\"%d\",x); output is 10

I have this piece of code can you explain me the output

unsigned int x=3;
~x;
printf("%d",x);

output is 10 I am not able to make it how.

I have compi开发者_StackOverflowled the code on turbo c


The code as you've posted it won't compile. It will compile if you change ~x to x = ~x;, but then it won't give the output "10".

The ~ operator creates a bitwise inverse of the number given. In binary, the number 3 as an eight-bit integer is represented by the bits 00000011. The ~ operator will replace every one of those bits with its opposite, giving 11111100, which is 252 unsigned, or -4 signed.

You declared x as an unsigned int, which means a 32-bit unsigned value on most platforms. So your original value is 00000000 00000000 00000000 00000011, and the inverse is 11111111 11111111 11111111 11111100, or 4294967292.


To print out unsigned values, especially when manipulating bits, use the unsigned format for printf:

printf("%u", x);

I'm not sure you've actually run the code you show. See this:

#include <stdio.h>

int main()
{
    unsigned int x = 3;
    unsigned int y = ~x;

    printf("Decimal. x=%u y=%u\n", x, y);
    printf("Hex. 0x%08X y=0x%08X\n", x, y);
    return 0;
}

Outputs:

Decimal. x=3 y=4294967292
Hex. 0x00000003 y=0xFFFFFFFC

Why the values are as they are should be obvious by basic binary arithmetic (and keeping in mind that C's ~ operator flips the bits of its argument).

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号