■掲示板に戻る■ 全部 1- 最新50 read.htmlに切り替える
■ C言語のお勉強ページに対するご意見・ご感想スレ

42 名前:へなちょこ管理人 ★:2009/01/27(火) 20:40:51
/*
符号無し整数xのposビット目からn個のビットを、1にした値を返す関数set_n、0にした値を返す関数reset_n、反転した値を返す関数inverse_n
unsigned set_n(         unsigned x, int pos, int n)
unsigned reset_n(       unsigned x, int pos, int n)
unsigned inverse_n(     unsigned x, int pos, int n)
を作成せよ。
*/

#include        <stdio.h>

/*---整数x中のセットされたビット数を返す---*/
int count_bits(unsigned x)
{
    int count = 0;
    while(x) {
        if ( x & 1U )   count++;
            x >>= 1;
    }
    return count;
}

/*---unsigned型のビット数を返す---*/
int int_bits(void)
{
    return count_bits(~0U);
}

/*---unsigned型のビット内容を表示---*/
void print_bits(unsigned x)
{
    int i;
    for ( i = int_bits() - 1; i >= 0; i-- )
        putchar((( x >> i ) & 1U ) ? '1' : '0');
    putchar('\n');
}

/*符号無し整数xのposビット目からn個のビットを1にした値を返す*/
unsigned set_n(unsigned x, int pos, int n)
{
    unsigned i = 1U;
    int j;
    for ( j = 0; j < n - 1; j++ ) {
        i <<= 1;
        i += 1;
    }
    i <<= pos - n;
    return i | x;
}

/*符号無し整数xのposビット目からn個のビットを0にした値を返す*/
unsigned reset_n(unsigned x, int pos, int n)
{
    unsigned i = 1U;
    int j;
    for ( j = 0; j < n - 1; j++ ) {
        i <<= 1;
        i += 1;
    }
    i <<= pos - n;
    i = ~i;
    return i & x;
}

/*符号無し整数xのposビット目からn個のビットを反転した値を返す*/
unsigned inverse_n(unsigned x, int pos, int n)
{
    unsigned i = 1U;
    int j;
    for ( j = 0; j < n - 1; j++ ) {
        i <<= 1;
        i += 1;
    }
    i <<= pos - n;
    return i ^ x;
}

int main(void)
{
    unsigned no;
    int bit,n;
    
    printf("整数を入力してください:");      scanf("%lu", &no);
    puts("ビットの中身");
    print_bits(no);
    printf("何ビット目を処理しますか:");    scanf("%d", &bit);
    printf("何個処理しますか:");        scanf("%d", &n);
    printf("ON_n:\t\t");
    print_bits(set_n(no, bit, n));
    printf("OFF_n:\t\t");
    print_bits(reset_n(no, bit, n));
    printf("INVERSE_n:\t");
    print_bits(inverse_n(no, bit, n));
    
    return 0;
}

29KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50 read.htmlに切り替える

名前: E-mail(省略可)

img0ch(CGI)/3.1.10