現在、独学でC言語を勉強中ですが、どうしても解らない所があります。
下記のコードで、count_bits関数を呼び出す時のreturn count_bits(~0U);の引数の
『~0U』の『U』とは何を表すのでしょうか?
また、int count_bits(unsigned x)の引数『x』に渡される値はいくつになるのでしょうか?
どなたか解説をお願いいたします。
lang
1/* 2 ビット単位の論理演算 3 */ 4 5#include <stdio.h> 6 7/*--- 整数x中のセットされたビット数を返す ---*/ 8int count_bits(unsigned x) 9{ 10 int bits = 0; 11 while (x) { 12 if (x & 1U) bits++; 13 x >>= 1; 14 } 15 return bits; 16} 17 18/*--- unsigned型のビット数を返す ---*/ 19int int_bits(void) 20{ 21 return count_bits(~0U); 22} 23 24/*--- unsigned型のビット内容を表示 ---*/ 25void print_bits(unsigned x) 26{ 27 int i; 28 for (i = int_bits() - 1; i >= 0; i--) 29 putchar(((x >> i) & 1U) ? '1' : '0'); 30} 31 32int main(void) 33{ 34 unsigned a, b; 35 36 printf("非負の整数を二つ入力してください。¥n"); 37 printf("a : "); scanf("%u", &a); 38 printf("b : "); scanf("%u", &b); 39 40 printf("\na = "); print_bits(a); 41 printf("\nb = "); print_bits(b); 42 printf("\na & b = "); print_bits(a & b); /* aとbの論理積 */ 43 printf("\na | b = "); print_bits(a | b); /* aとbの論理和 */ 44 printf("\na ^ b = "); print_bits(a ^ b); /* aとbの排他的論理和 */ 45 printf("\n~a = "); print_bits(~a); /* aの1の補数 */ 46 printf("\n~b = "); print_bits(~b); /* bの1の補数 */ 47 putchar('\n'); 48 49 return 0; 50}

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/03/02 17:28