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