ПРОБЛЕМА:
«SHF_WRITE | SHF_ALLOC» говорит «бит 0x1 ИЛИ бит 0x2», а не «биты 0x1 И 02x».
Тем не менее, если вы хотите напечатать «НЕКОТОРЫЙ MSG»если биты 0x1 и 0x2 оба были «включены» в некотором значении «флаг», вот как:
if (flag & SHF_WRITE & SHF_ALLOC)
printf ("SOME MSG, flag= 0x%x\n", flag);
Если вы хотите напечатать текстовое представление ЛЮБЫХ битов, которые были "on "в значении, вы можете сделать что-то вроде этого:
char buf[80] = '\0';
if (flag & SHF_WRITE)
strcpy (buf, " SHF_WRITE");
if (flag & SHF_ALLOC)
strcpy (buf, " SHF_ALLOC");
...
printf ("SOME MSG, flag= %s\n", buf);
И, наконец, если вы НЕ хотите печатать, если бит NO установлен, просто сделайте это:
if (flag)
{
... do printing ...
}
else
{
... do nothing? ...
}