下
C言語のお勉強ページに対するご意見・ご感想スレ
40:@携帯 2009/01/27(火) 13:03:01 [sage] あー ちゃんと引数あたえてなかったりでめちゃめちゃや。 帰宅してから直します。
41:へなちょこ管理人 ★ 2009/01/27(火) 20:12:43 >符号無し整数xのposビット目からn個のビットを 右にn個なのか左にn個なのか・・・。 humm...
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; }
43:へなちょこ管理人 ★ 2009/01/27(火) 20:43:39 上記の回答は右にn個処理するものです。 左にn個処理する場合は各関数の i <<= pos - n;を i <<= pos - 1;にしたらいいと思います。
44:へなちょこ管理人 ★ 2009/01/27(火) 20:49:27 んで、もし、posがunsignedを超えたり、nがposを超える入力があった場合のために、 pos → pos % int_bits() n → n % pos にしとくと安全かもしれません。
45:へなちょこ管理人 ★ 2009/01/27(火) 21:01:53 http://newcomer.nuts-choco.com/clang/src/7/7-4.c.txt んで、ファイル置いておきました。
46:uuuss 2009/05/17(日) 17:28:39 http://newcomer.s368.xrea.com/clang/ 掲示板へのリンクが切れてるw
47:へなちょこ管理人 ★ 2009/05/18(月) 02:54:08 >>46 っうぇっうぇw 一部相対リンクじゃなくて絶対リンクになってるから直すのめんどくせぇww
48:へなちょこ管理人 ★ 2009/05/18(月) 02:57:28 nuts-chocoの方も復活してるけどいずれまた落ちるだろうからシカトw 看板だけ取り戻せてよかた〜。 みっちゃんに作ってもらった大切な看板だからなぁ。
49:へなちょこ管理人 ★ 2009/07/03(金) 21:10:19 /* 文字列strの中に、文字cが含まれていれば(複数ある場合は、最も先頭側とする)、 その文字へのポインタを返し、含まれていなければNULLを返す関数 char *str_chr(const char *str, int c) {} を作成せよ。 */ #include <stdio.h> char *str_chr(const char *str, int c) { while(*str){ if(*str == c) return (char*)str; str++; } return NULL; } int main(void) { char str[128]; int c; char *p; printf("文字列を入力してください:"); scanf("%s", str); while(getchar() != '\n' ); printf("検索する文字を入力してください:"); scanf("%c", &c); if( (p = str_chr(str, c)) == NULL ) printf("指定された文字は見つかりませんでした。\n"); else printf("%cは%d文字目にありました。\n", c, p - &str[0] + 1); return 0; }
上
前
次
1-
新
書
写
板
AA
設
索
C言語のお勉強ページに対するご意見・ご感想スレ http://newcomer.s368.xrea.com/test/read.cgi/bbs/1186266778/l50