unsigned char st; エンディアン ビッグエンディアン  左がLSB(least significant bit)       リトルエンディアン 右がLSB 最上位ビット MSB(Most Significant Bit) 0bit目:一番小さい桁 1:状態異常 0:通常状態 左シフト演算 << st(0) : 麻痺 1 00000001 << 0 1<<0 st(1) : 睡眠 2 00000001 << 1 1<<1 st(2) : 毒 4 00000001 << 2 1<<2 st(3) : 怒り 8 00000001 << 3 1<<3 st(4) : 悲しみ 16 00000001 << 4 1<<4 st(5~7):未使用 0とする 論理演算:and, or, not not(0)->1 not(1)->0 and演算(かつ) 0 & 0 = 0 0 & 1 = 0 1 & 0 = 0 1 & 1 = 1 or演算(または) 0 | 0 = 0 0 | 1 = 1 1 | 0 = 1 1 | 1 = 1 麻痺 1<<0 と 睡眠 1<<1同時 00000011 <= (1<<0)|(1<<1) ビット bit に i 番目のフラグを立てる => res = bit|(1< res = bit&(~(1< C言語ではfalse if(00001000) => C言語ではtrue 0以外の値はtrue 0のみfalse ⓪麻痺&睡眠 整数だといくつ? 00000011 3 ①麻痺&悲しみ 整数だといくつ? 00010001 17 ②毒&怒り&悲しみ 整数だといくつ? 00011100 28 00000001 * 2 = 00000010 00000010 * 2 = 00000100 00000100 * 2 = 00001000 左シフト演算 00001000 00010000 00000000 0 00000001 1 00000010 2 … 11111111 255