■この記事の概要
この記事では、
C言語のビット演算を使って、
ビットを「立てる」 (x |= (1<<bit)
)、
ビットを「下げる」 (x &= ~(1<<bit)
) 方法を説明しています。
さらに、
効果のないデッドコード (x |= (0<<bit)
) に関する注意点についても解説しています。
■特定のビットを1にする(立てる)
#include <stdio.h>
#include <stdint.h>
uint32_t bit_on(uint32_t x,int bit) {
x |= (1<<bit);//特定のビットを立てる
return x;
}
int main(void){
uint32_t x = 0b0000;
printf("%x\n",x=bit_on(x,0));//0b0001=1
printf("%x\n",x=bit_on(x,1));//0b0011=3
printf("%x\n",x=bit_on(x,2));//0b0111=7
printf("%x\n",x=bit_on(x,3));//0b1111=F
}
./a.out
1
3
7
f
ビットを立てるには
x |= (1<<bit)
とします。
■特定のビットを0にする(下げる)
#include <stdio.h>
#include <stdint.h>
uint32_t bit_off(uint32_t x,int bit) {
x &= ~(1<<bit);//特定のビットを下げる
return x;
}
int main(void){
uint32_t y = 0b1111;;
printf("%x\n",y=bit_off(y,3));//0b0111=7
printf("%x\n",y=bit_off(y,2));//0b0011=3
printf("%x\n",y=bit_off(y,1));//0b0001=1
printf("%x\n",y=bit_off(y,0));//0b0000=0
}
./a.out
7
3
1
0
ビットを下げるには
x &= ~(1<<bit)
とします
チルダ~を使うのがミソです。
■紛らわしい何もしないデッドコード
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の下げ方を知らない初級者も多いので
デッドコードは避けたほうが良いでしょう。