以下のような三行のコードがありました。。。順番は不問です。

#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))   

struct boot_params boot_params __attribute__((aligned(16)));

BUILD_BUG_ON(sizeof boot_params != 4096);

上はマクロ、真ん中は構造体?、下は実際の使用だと思います。

マクロの使い方の*!!の部分の意味がわかりません。
真ん中の構造体は()が使われている理由がわかりません。そして、alignedが何なのか解決できません。
そのため一番下の結果が予測できません。
ファイルは、/linux-4.5.1/arch/x86/boot内にあるものです。