Я заметил, что многие программисты на C/С++ реализуют наборы флагов, используя что-то вроде следующего:
#define FLAG_1 (1 << 0)
#define FLAG_2 (1 << 1)
#define FLAG_3 (1 << 2)
unsigned int my_flags = 0; /* no flag set */
my_flags |= FLAG_2; /* set flag 2 */
Но действительно ли этот подход звучит? Мне кажется, что он делает предположения о двоичном представлении unsigned ints, который не является частью стандарта языка C/С++. Например, что "0" на самом деле 0x0000.
Неужели я ошибаюсь? Или я прав в теории, но не на практике в настоящее время стандартное оборудование?