質問: myhand->card_num[input_cnt + 1]; } myhand->hand_cnt--;//手札を一枚減らす } ```
回答: > > ビット演算を使って > > > 初期化に使うというのがよくわからないので外しているかもしれませんが、こういった感じのことでしょうか? 復号に余計な処理が入りますが、ポインタが無くなってカード情報一枚が2~3バイトから1バイトになるので(コンパイラのchar型配列初期化の扱いにもよりますが)トータルでは消費メモリは減らせていると思うのですが・・・ ``` char number[] = {'\x01','\x02','\x03','\x04','\x05','\x06','\x07','\x08','\x09','\x0A','\x0B','\x0C','\x0D','\x0E', //スペード '\x11','\x12','\x13','\x14','\x15','\x16','\x17','\x18','\x19','\x1A','\x1B','\x1C','\x1D','\x1E', //クラブ '\x21','\x22','\x23','\x24','\x25','\x26','\x27','\x28','\x29','\x2A','\x2B','\x2C','\x2D','\x2E', //ダイヤ '\x31','\x32','\x33','\x34','\x35','\x36','\x37','\x38','\x39','\x3A','\x3B','\x3C','\x3D','\x3E', } ;//ハート char suit[] = { 'S', 'C', 'D', 'H' }; #define get_suit_char(n) suit[n>>4] #define get_number(n) (n&0x0F) /* 中略 */ printf("(%d)%c%d", select, get_suit_char(number[myhand->card_num[myhnd_cnt]]),get_number(number[myhand->card_num[myhnd_cnt]]) ); ```