■1.次のプログラムは何と表示されますか?
#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);
}
●解答
■2.ビットの立て方
#include <stdio.h>
#include <stdint.h>
uint32_t bit_on(uint32_t x,int bit) {
x |= (1<<bit);//ビットを立てる
return x;
}
■3.ビットの下げ方
uint32_t bit_off(uint32_t x,int bit) {
x &= ~(1<<bit);//ビットを下げる
return x;
}
ビット演算子チルダ~を使う
■4.何もしない
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の下げ方を知らない初級者も多いので
デッドコードは避けたほうが良いでしょう。