/* FlagsGuide.cpp
*
* Copyright (c) 2006 by toxcct. All rights reserved.
* Consult your license regarding permissions and restrictions.
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
enum Flags {
STYLE1 = 1,
STYLE2 = 2,
STYLE3 = 4,
STYLE4 = 8,
STYLE5 = 16,
STYLE6 = 32,
STYLE7 = 64,
STYLE8 = 128
};
void main(void) {
char pszStyle1Binary[65];
char pszStyle2Binary[65];
char pszStyle3Binary[65];
char pszStyle4Binary[65];
char pszStyle5Binary[65];
char pszStyle6Binary[65];
char pszStyle7Binary[65];
char pszStyle8Binary[65];
itoa(STYLE1, pszStyle1Binary, 2);
itoa(STYLE2, pszStyle2Binary, 2);
itoa(STYLE3, pszStyle3Binary, 2);
itoa(STYLE4, pszStyle4Binary, 2);
itoa(STYLE5, pszStyle5Binary, 2);
itoa(STYLE6, pszStyle6Binary, 2);
itoa(STYLE7, pszStyle7Binary, 2);
itoa(STYLE8, pszStyle8Binary, 2);
printf("\n\n================[ FLAGS ]================\n"
" STYLE1 = %3d = 0x%02X = 0b%08s\n"
" STYLE2 = %3d = 0x%02X = 0b%08s\n"
" STYLE3 = %3d = 0x%02X = 0b%08s\n"
" STYLE4 = %3d = 0x%02X = 0b%08s\n"
" STYLE5 = %3d = 0x%02X = 0b%08s\n"
" STYLE6 = %3d = 0x%02X = 0b%08s\n"
" STYLE7 = %3d = 0x%02X = 0b%08s\n"
" STYLE8 = %3d = 0x%02X = 0b%08s\n\n",
STYLE1, STYLE1, pszStyle1Binary,
STYLE2, STYLE2, pszStyle2Binary,
STYLE3, STYLE3, pszStyle3Binary,
STYLE4, STYLE4, pszStyle4Binary,
STYLE5, STYLE5, pszStyle5Binary,
STYLE6, STYLE6, pszStyle6Binary,
STYLE7, STYLE7, pszStyle7Binary,
STYLE8, STYLE8, pszStyle8Binary);
getch();
int iMyStyle = STYLE1 | STYLE3 | STYLE6;
char pszMyStyleBinary[65];
itoa(iMyStyle, pszMyStyleBinary, 2);
printf("\n\n===============[ MY STYLE ]==============\n"
" iMyStyle = STYLE1 | STYLE3 | STYLE6\n"
" = 0b%08s\n\n",
pszMyStyleBinary);
getch();
printf("\n\n============[ Bit Extraction ]===========\n"
" Bit 5 = (iMyStyle & STYLE5) == STYLE5\n"
" Bit 5 = %s\n"
" Bit 6 = (iMyStyle & STYLE6) == STYLE6\n"
" Bit 6 = %s\n\n",
(iMyStyle & STYLE5) == STYLE5 ? "true" : "false",
(iMyStyle & STYLE6) == STYLE6 ? "true" : "false");
getch();
printf("\n\n==============[ Add Style 8 ]============\n"
" iMyStyle before = 0b%08s\n"
" Bit 8 before = %d\n\n",
pszMyStyleBinary,
(iMyStyle & STYLE8) == STYLE8 ? 1 : 0);
printf(" -> Adding STYLE8 (2 ways):\n"
" -> iMyStyle = iMyStyle | STYLE8\n"
" -> iMyStyle |= STYLE8\n\n");
iMyStyle |= STYLE8;
itoa(iMyStyle, pszMyStyleBinary, 2);
printf(" iMyStyle after = 0b%08s\n"
" Bit 8 after = %d\n\n",
pszMyStyleBinary,
(iMyStyle & STYLE8) == STYLE8 ? 1 : 0);
getch();
printf("\n\n===========[ Removing Style 8 ]==========\n"
" iMyStyle before = 0b%08s\n"
" Bit 8 before = %d\n\n",
pszMyStyleBinary,
(iMyStyle & STYLE8) == STYLE8 ? 1 : 0);
printf(" -> Removing STYLE8 (2 ways):\n"
" -> iMyStyle = iMyStyle & ~STYLE8\n"
" -> iMyStyle &= ~STYLE8\n\n");
iMyStyle &= ~STYLE8;
itoa(iMyStyle, pszMyStyleBinary, 2);
printf(" iMyStyle after = 0b%08s\n"
" Bit 8 after = %d\n\n",
pszMyStyleBinary,
(iMyStyle & STYLE8) == STYLE8 ? 1 : 0);
getch();
printf("\n\n===========[ Switching Style 6 ]==========\n"
" iMyStyle before = 0b%08s\n"
" Bit 6 before = %d\n\n",
pszMyStyleBinary,
(iMyStyle & STYLE6) == STYLE6 ? 1 : 0);
printf(" -> Switching STYLE6 (2 ways) 1st time:\n"
" -> iMyStyle = iMyStyle ^ STYLE6\n"
" -> iMyStyle ^= STYLE6\n\n");
iMyStyle ^= STYLE6;
itoa(iMyStyle, pszMyStyleBinary, 2);
printf(" iMyStyle after = 0b%08s\n"
" Bit 6 after = %d\n\n",
pszMyStyleBinary,
(iMyStyle & STYLE6) == STYLE6 ? 1 : 0);
printf(" -> Switching STYLE6 2nd time\n\n");
iMyStyle ^= STYLE6;
itoa(iMyStyle, pszMyStyleBinary, 2);
printf(" iMyStyle after = 0b%08s\n"
" Bit 6 after = %d\n\n",
pszMyStyleBinary,
(iMyStyle & STYLE6) == STYLE6 ? 1 : 0);
printf("\n\n=================[ END ]=================\n\n");
getch();
}