I've got a flag-holding integer that has an existing set of possible flags:
#define MAIL_ADDR_FROM  0x0001  /* address field contains the from address */
#define MAIL_ADDR_TO    0x0002  /* address field contains the to address */
#define MAIL_SEEN       0x0004  /* message has been read by the user */
#define MAIL_ATTACH     0x0008  /* message has an attachment */
#define MAIL_IMP_HIGH   0x0010  /* message is of high importance */
#define MAIL_IMP_LOW    0x0020  /* message is of low importance */
#define MAIL_FLAGGED    0x0040  /* message has been flagged */
#define MAIL_REPLIED    0x0080  /* message has been replied to */
#define MAIL_DRAFT      0x0100  /* message is a draft */
#define MAIL_NEW        0x0200  /* message is new */
#define MAIL_DELETED    0x8000  /* message is deleted */
I need to add a new one:
#define MAIL_SPAM       0x????  /* message is spam */ 
Is there a reason the existing flag list skips from 0x0200 all the way to 0x8000? My understanding is that usable values for my new flag would be 0x0400, 0x0800 and 0x1000-0x4000. Am I misunderstanding something about how these bitsets work?