Namaran

Code daily. Without assist.

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つの関数に「立てる」と「降ろす」を両方持たせられます。これは参考実装であり、唯一の正解ではありません。