28 преобразуется в 11100 в двоичном виде.Это означает, что биты 1 и 2 не установлены, а биты 3, 4 и 5 установлены.
Несколько моментов: во-первых, любой, кто действительно привык к C, обычно начинает нумерацию с 0, а не с 1. Во-вторых,Вы можете проверить отдельные флаги с помощью побитового оператора и оператора (&
), например:
#define flag1 1 // 1 = 00 0001
#define flag2 2 // 2 = 00 0010
#define flag3 4 // 4 = 00 0100
#define flag4 8 // 8 = 00 1000
#define flag5 16 // 16 = 01 0000
#define flag6 32 // 32 = 10 0000
if (myvalue & flag1)
// flag1 was set
if (myvalue & flag4)
// flag4 was set
и так далее.Вы также можете проверить, какие биты установлены в цикле:
#include <stdio.h>
int main() {
int myvalue = 28;
int i, iter;
for (i=1, iter=1; i<256; i<<=1, iter++)
if (myvalue & i)
printf("Flag: %d set\n", iter);
return 0;
}
должно вывести:
Flag: 3 set
Flag: 4 set
Flag: 5 set