前提・実現したいこと
C言語を勉強し始めて2週間程度のため、ほとんど初心者です。
2つの非負の整数を読み込んで、ビット単位の論理積、論理和などの演算を行った結果を表示したい。
発生している問題・エラーメッセージ
エラー文は出てきていませんが、演算の結果がおかしいです。 例) 非負の整数を2つ入力してください。 a:3 b:5 a = 11111111111111111111111111111111 b = 00000000000000000000000000000000 a & b = 00000000000000000000000000000000 a | b = 11111111111111111111111111111111 a ^ b = 11111111111111111111111111111111 ~a = 00000000000000000000000000000000 ~b = 11111111111111111111111111111111
該当のソースコード
C
1/* 2 ビット単位の論理演算 3*/ 4#include <stdio.h> 5 6/* 整数x中のセットされたビット数を返す */ 7int count_bits(unsigned x) 8{ 9 int bits = 0; 10 while (x) { 11 if (x & 1U) { 12 bits++; 13 } 14 x >>= 1; 15 } 16 17 return bits; 18} 19 20/* unsign型のビット数を返す */ 21int int_bits(void) 22{ 23 return count_bits(~0U); 24} 25 26/* unsigned型のビット内容を表示 */ 27void print_bits(unsigned x) 28{ 29 int i; 30 for (i = int_bits() - 1; i >= 0; i--) { 31 putchar(((x >> 1) & 1U) ? '1' : '0'); 32 } 33} 34 35int main(void) 36{ 37 unsigned a, b; 38 39 printf("非負の整数を2つ入力してください。\n"); 40 printf("a:"); scanf("%u", &a); 41 printf("b:"); scanf("%u", &b); 42 43 printf("\na = "); print_bits(a); 44 printf("\nb = "); print_bits(b); 45 printf("\na & b = "); print_bits(a & b); /* aとbの論理積 */ 46 printf("\na | b = "); print_bits(a | b); /* aとbの論理和 */ 47 printf("\na ^ b = "); print_bits(a ^ b); /* aとbの排他的論理和 */ 48 printf("\n~a = "); print_bits(~a); /* aの1の補数 */ 49 printf("\n~b = "); print_bits(~b); /* bの1の補数 */ 50 putchar('\n'); 51 52 return 0; 53}
試したこと
コードの確認をしましたが、誤って記述しているところは見当たりませんでした。
補足情報(FW/ツールのバージョンなど)
Vidual Studio Codeを使っています。
32bitで表示されます。
新明解C言語 入門編 p189 List7−6
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/16 22:28
2020/12/16 23:14
2020/12/17 00:13