int m=32
printf("%x" , ~m);
Output of this statement is ffdf and without ~ output is 20.
What is the significance of %x and ~?
The ~ operator is bitwise negation. It will print bitwise negation of m's value. %x means that printf will output its value in hexadecimal format.
So, value 0xffdf is the negation of value 0x20 (32).
Value 32 (int bits would be):
0000 0000 0010 0000
Its bitwise negation will be:
1111 1111 1101 1111
Which makes sense since:
1111 1111 = 0xff
And:
1101 1111 = 0xdf
The %x is the printf format that indicates that the int value should be displayed in hexadecimal.
The ~ is bitwise NOT, which flips all the bits in the integer.
The statement:
printf("%x", m);
will display the output 20 as 0x20 = decimal 32.
The statement:
printf("%x", ~m);
will display the output ffdf as 0xffdf is the bitwise inverse of 0x20.
It may make more sense to visualize the bitwise negation in binary:
Base 10: 32 65503
Base 16: 0x20 0xFFDF
Base 2: 0000000000100000 1111111111011111
The ~ symbol represents the bitwise NOT, or complement operator; a unary operation that performs logical negation on each bit, forming the ones' complement of the given binary value. Binary digits that are 0 become 1, and those that are 1 become 0.
32 is 00100000 in binary, and ~32 is 11011111 in binary (or 223 in decimal).
The %x option in the printf function will display a unsigned hexadecimal format (using lowercase letters).
So,
printf("%x", m); // displays the hexadecimal value of 32 (00100000), "20"
printf("%x", ~m); // displays the hexadecimal value of ~32 (11101111), "ffdf"
[Sources]
http://en.wikipedia.org/wiki/Bitwise_operation#NOT
http://en.wikipedia.org/wiki/Hexadecimal
http://en.wikipedia.org/wiki/Printf_format_string
And %x means you print the value of x in hexadecimale.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With