■掲示板に戻る■
全部
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に切り替える