dポイントプレゼントキャンペーン実施中!

char型の変数にビット配列を代入しそれを文字として出力させたいのです。
どこが間違っているのか分かりませんが一応流れを書いたプログラムを載せておきます。

char binary = 0;
int i;

for(i=0;i<8;i++){
if(省略) binary = binary & 11111110;
else binary = binary | 00000001;
binary = binary << 1;
}
printf("実行結果 %c",binary);


実行結果 00110110

というように最下位ビットに0か1を代入し、左シフトをし、というのを繰り返しprintf("%c",binary)でビット列を表示させたいのですが、これを実行すると結果は文字化けしたようなものが表示されます。
charの配列を作ってビット列を表示させるやり方はわかるのですが、学校の課題みたいなもので配列を使ってはいけないみたいなのです。
教科書を読んでも分からないので困っています。
よろしくお願いします。

A 回答 (5件)

No3 です。


今度は、「省略」の解明(◆)です。
「解明」してどうなるの、と問われればそれまてですが、何かの参考になればと。
-------------------------------------
むりくり、

>実行結果 00110110

になるように、プログラムしてみました。
-------------------------------------
#include <stdio.h>

#define un_char unsigned char
void main()
{
int i;
un_char cBinary = 0x00, cWork;

for( i = 0; i < 8; i++ ){

if( ( 0 == i ) || ( 1 == i ) || ( 2 == i ) || ( 5 == i ) ) cBinary &= (un_char)0xFE; // ◆

elsecBinary |= 0x01;

cBinary <<= 1;
}
for( i = 0; i < 8; i++ ){ // 1ビットずつの表示(2進風?)

cWork = cBinary >> ( 7 - i );
cWork &= 0x01;
cWork += 0x30;

printf( "%c", cWork );
}
}
★重要
1 と「表示」したいとき、%c フォーマット指定子をもちいて '1' (0x31)を出力
0 と「表示」したいとき、%c フォーマット指定子をもちいて '0' (0x30)を出力
-----------------------------------------
>これを実行すると結果は文字化けしたようなものが表示されます。

★理解できたのではないでしょうか(前の回答のアスキーコード表と併せて)。
    • good
    • 0

省略で何をしているかわかりませんが、


アドバイスをひとつ。

>for(i=0;i<8;i++){
> if(省略) binary = binary & 11111110;
> else binary = binary | 00000001;
> binary = binary << 1;
>}
for文の8周目(最終周)の左シフトが余計です。
計算結果が9bitになってしまいます。
(実際はcharが8bitなので、最初の1bitの情報が欠けてしまいます。)
    • good
    • 0

(「回答」ではありません)



「ビット配列」とか「左シフト」の文字を見ると、

「char型の変数に」は、「unsigned char型の変数に」とした方がよいかと・・。
 (「趣味の世界」と言われればそのとおりですが)

#include <stdio.h>
void main()
{
unsigned char cAAA = 0x80;
char cBBB = 0x80;

cAAA >>= 1;
cBBB >>= 1;

printf( "%02X\n", cAAA );
printf( "%02X\n", cBBB );
}
これを実行すると、

40
FFFFFFC0 (オーバーフロー)

となります(「左シフト」だけならいいのですが)。

《参考》
http://e-words.jp/p/r-ascii.html
http://www.k-cube.co.jp/wakaba/server/format.html
    • good
    • 0

フォーマット指定子 %c について調べてみてください





00110110=0x36
を文字表示させたら'6'じゃないんですかね。へんな文字が表示されますか?

ビット表示するには1回でまとめて
printf("実行結果 %c",binary);
ではできないと思います(%c以外でも)
1ビットずつ表示してください
    • good
    • 0

★アドバイス


・C言語では2進表記は出来ません。
>if(省略) binary = binary & 11111110;
 ここの部分の『11111110』を『0xFE』にでもすれば良いでしょう。
>else binary = binary | 00000001;
 ここも同じく間違い。
>charの配列を作ってビット列を表示させるやり方はわかるのですが、学校の課題みたいなもので配列を
>使ってはいけないみたいなのです。
 ↑
 ビット演算のお勉強ですね。
 『(省略)』部分が不明なのでこれ以上のアドバイスは出来ません。
 とにかく2進数は使えません。16進数などで指定して下さい。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!