flag是unsigned char型数据,只有1个字节,最多存入0xFF个数据。而你这里明显大于一个字节的数据,所以会出现溢出现象,只保留低两位数据(16进制),也就是保留0x00。然后你这里flag&n,因为&是有0出0,flag为0,所以flag&n永远为0
flag是short型,你赋值后flag是0啊!!!溢出啦