アプリ版:「スタンプのみでお礼する」機能のリリースについて

初心者なんですが、
2進数を出すプログラムを作成したところ、
"1011"のように表示したいのですが、プログラム結果"1101"となってしまいます。
最後に逆から表示するしかたがわかりません。

どのようにしたら逆に表示されるのか教えてください。

A 回答 (5件)

どう組まれたのかが提示されれば答えやすいのですが。



通常2で割って余りを求めることを繰り返します。
余りを右端に埋めながら左シフトしていくとおっしゃる通りになります。
シフトしないで右端から順番に左に埋めていけば正しい答えになるはずです。

最後に反転する方法もありますがそれは最後の手段かと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
私のレベルでできそうな方法なのでやってみます。

お礼日時:2005/08/10 13:45

#3です。


暇だったので作ってみました。

#include <stdio.h>

void main( void )
{
 unsigned long a;
 int i;
 char b[33];

 a = 5;

 memset( b, 0x00, sizeof( b ) );

 for( i = 0; i < 32; i++ ){
  b[i] = '0' + ( ( ( a << i ) & 0x80000000 ) >> 31 );
 }
 printf( "%s\n", b );
}

#3さんのように冒頭の0を省く処理は入ってませんが、やるならフラグでも立てればいいでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。
試してみます。

お礼日時:2005/08/10 13:47

ハナから頭から2進数表示に変換するサンプル


------------------------------------------
#include <stdio.h>
#include <limits.h>

char *itob(unsigned d, char *buff){
unsigned flag = (unsigned)INT_MIN;
char *p=buff;

while(0==(d & flag) && 0!=flag)
flag>>=1; //頭の0スキップ
while(0!=flag){
*p++=(d & flag) ? '1' : '0';
flag>>=1;
}
*p='\0';
if(*buff=='\0'){
*buff='0';
buff[1]='\0';
}
return buff;
}

void main(void){
char buff[33];//int のサイズは4バイト?

printf("%s\n",itob(11,buff));
printf("%s\n",itob( 0,buff));
printf("%s\n",itob(-1,buff));
}
    • good
    • 0
この回答へのお礼

ありがとうございます。
私には少し難しいのでもう少し勉強してからやってみます。

お礼日時:2005/08/10 13:48

結局はやり方次第ですよ。


なので現状のやり方(プログラム)を提示してください。
その方が解決が早いですよ。
    • good
    • 0

文字列を反転する関数を作るのも1つの方法だと思います。


参考URL以外にもreverseで検索するといくつか引っかかります

参考URL:http://okweb.jp/kotaeru.php3?qid=1438944
    • good
    • 0

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