/* 指定したビットをON/OFFするプログラム */
#include <stdio.h>
#include <limits.h>

unsigned bit_on(unsigned dt, int pos);
unsigned bit_off(unsigned dt, int pos);

int main(void)
{
    int pos;

    printf("ビット位置(0 〜 %d）＞ ", 
			sizeof(unsigned) * CHAR_BIT - 1);
    scanf("%d", &pos);
    
    printf("ビットON  = %#x\n", bit_on(0U, pos));
    printf("ビットOFF = %#x\n", bit_off(~0U, pos));

    return 0;
}

/*** 指定ビットをONする ***/
/*（仮引数）dt:データ　pos:ビット位置 （返却値）データ */
unsigned bit_on(unsigned dt, int pos)
{
    unsigned bit = 1U;
    
    bit <<= pos;
    return dt | bit;
}

/*** 指定ビットをOFFする ***/
/*（仮引数）dt:データ　pos:ビット位置 （返却値）データ */
unsigned bit_off(unsigned dt, int pos)
{
    unsigned bit = 1U;
    
    bit <<= pos;
    return dt & ~bit;
}
