C Language – What Does !!(x) Mean in C (Linux Kernel)?

c++gcc

I've been reading through the Linux kernel (specifically, 2.6.11).
I came across the following definition:

#define unlikely(x)     __builtin_expect(!!(x), 0)

(from linux-2.6.11/include/linux/compiler.h:61 lxr link)

What does !! accomplish? Why not just use (x)?

See also:

Best Answer

!!(x) forces it to be either 0 or 1. 0 remains 0, but any non-zero value (which would be 'true' in a boolean context) becomes 1.