【C言語】
ビット演算:ビットを立てる・下げる方法
-何もしないデッドコードの回避-

■この記事の概要

この記事では、
C言語のビット演算を使って、
ビットを「立てる」 (x |= (1<<bit))、
ビットを「下げる」 (x &= ~(1<<bit)) 方法を説明しています。

さらに、
効果のないデッドコード (x |= (0<<bit)) に関する注意点についても解説しています。


■ビットを立てる x |= (1<<bit)

#include    <stdio.h>
#include    <stdint.h>
uint32_t bit_on(uint32_t x,int bit) {
    x |= (1<<bit);//ビットを立てる  
    return  x;
}

■ビットを下げる x &= ~(1<<bit)

uint32_t bit_off(uint32_t x,int bit) {
    x &= ~(1<<bit);//ビットを下げる
    return  x;
}

ビット演算子チルダ~を使う


■何もしない(デッドコード)

uint32_t bit_do_nothing(uint32_t x,int bit) {
    x |= (0<<bit);//デッドコード
    return  x;
}

x |= (0<<bit);
bitは立も下がりもしないので
デッドコード(何もしないコード)と
なります。

”I have no money”と同じ発想で
”0を立てる”
コーディングする人も多いのですが、
bitの下げ方を知らない初級者も多いので
デッドコードは避けたほうが良いでしょう。


■サンプルコードのまとめ

#include    <stdio.h>
#include    <stdint.h>
uint32_t bit_on(uint32_t x,int bit) {
    x |= (1<<bit);//ビットを立てる  
    return  x;
}
uint32_t bit_off(uint32_t x,int bit) {
    x &= ~(1<<bit);//ビットを下げる
    return  x;
}
uint32_t bit_do_nothing(uint32_t x,int bit) {
    x |= (0<<bit);//ビットを立てたい?下げたい?
    return  x;
}
int main(void) {
    uint32_t x = 3; //0b0011
    x = bit_on(x,2);//0b0011|0b0100=0b0111
    printf("%x\n",x);
    x = bit_do_nothing(x,2);
    printf("%x\n",x);
    x = bit_off(x,2);
    printf("%x\n",x);
}

➡実行結果

7
7
3

参考:

INT17-C. 処理系に依存しない方法で整数定数を定義する