整数nのk番目のビットを1に変更した整数を返却する関数(set_flag)と 整数nのk番目のビットを0に変更した整数を返却する関数(unset_flag)がうまくできません。下の実行結果のようになってしまいます。どうしたらよいでしょうか。 #include<stdio.h> int get_flag(unsigned char n,int k); unsigned char set_flag(unsigned char n,int k); unsigned char unset_flag(unsigned char n,int k); int main(void){ int bit_num; //0以上7以下 unsigned char num; //0以上255以下 do{ printf("整数(0~255):"); scanf("%s",&num); }while(num<0||num>255); do{ printf("何番目?(0~7):"); scanf("%d",&bit_num); }while(bit_num<0||bit_num>7); printf("%d番目のビットは%dです。¥n",bit_num,get_flag(num,bit_num)); printf("%d番目のビットを1に変更した整数は%dです。¥n",bit_num,set_flag(num,bit_num)); printf("%d番目のビットを0に変更した整数は%dです。¥n",bit_num,unset_flag(num,bit_num)); return 0; } int get_flag(unsigned char n,int k){ int bit; bit=(n>>k)&0x01; return bit; } unsigned char set_flag(unsigned char n,int k){ unsigned char bit=1; int i; for(i=1;i<=k;i++){ bit=bit*2; } n=n|bit; return n; } unsigned char unset_flag(unsigned char n,int k){ unsigned char bit=1; int i; for(i=1;i<=k;i++){ bit=bit*2; } bit=~bit; n=n&bit; return n; } 実行結果 name@DESKTOP-EK5AH1R ~/x $ ./n05kd01.exe 整数(0~255):255 何番目?(0~7):4 4番目のビットは1です。 4番目のビットを1に変更した整数は50です。 4番目のビットを0に変更した整数は34です。 name@DESKTOP-EK5AH1R ~/x $ ./n05kd01.exe 整数(0~255):255 何番目?(0~7):7 7番目のビットは0です。 7番目のビットを1に変更した整数は178です。 7番目のビットを0に変更した整数は50です。
C言語関連