2026-09-20
set_masked.c
unsigned set_masked(unsigned flags, unsigned mask, int enable) {
// write this: set the bits in mask when enable is nonzero, clear them
// when enable is zero; every bit of flags outside mask stays unchanged
}
set_maskedを実装してください。maskで指定したビットだけを、enableが真なら立て、偽なら降ろすこと。maskの外のビットは変化させないこと。
Reference
unsigned set_masked(unsigned flags, unsigned mask, int enable) {
return enable ? (flags | mask) : (flags & ~mask);
}
立てる操作と降ろす操作は、どちらもmaskを経由して書けます。立てるときはflags | maskで該当ビットを1にし、降ろすときはflags & ~maskで該当ビットだけを0にします。mask以外のビットは、ORでは0を重ねても値が変わらず、ANDでは1を重ねても値が変わらないので、どちらの式でも自然に保たれます。enableで分岐してこの2つの式のどちらかを選ぶだけで、1つの関数に「立てる」と「降ろす」を両方持たせられます。これは参考実装であり、唯一の正解ではありません。