4

「LetusC」という本を読んでいるshowbit()と、数字のビットを表示できる関数が存在することがわかりました。そのために言及された特別なヘッダーファイルはありませんでした。インターネットで検索しましたが、何も役に立ちませんでした。そのような機能はありますか?これで10進数の2進数を出力したいと思います。それ以外の場合は、交換機能をお願いします。ありがとう

4

8 に答える 8

3

すべての整数は、実際にはコンピューター内のバイナリです。printfと「%d」を使用して印刷しようとすると、その値の10進数表現である文字列に変換されるだけです。他の基数 (基数 2 やバイナリなど) でどのように表示されるかを知りたい場合は、適切な printf 書式文字列が存在する場合はそれを指定する必要があります (16 進数の場合は "%x") か、その文字列を自分で作成して、印刷する。

[2,36] の任意の基数で整数の文字列表現を作成できるコードを次に示します。

#include <stdio.h>
#include <string.h>

char digits[]="01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";

void reverse(char* start, char* end)
{
    for(end--;start<end;start++,end--)
    {
        char t=*start;
        *start=*end;
        *end=t;
    }
}


int base_change(int n, int base,char* buffer)
{
    int pos=0;
    if (base>strlen(digits)) 
        return -1;
    while(n)
    {
        buffer[pos]=digits[n%base];
        n/=base;
        pos++;
    }
    buffer[pos]='\0';
    reverse(buffer,buffer+pos);
    return 0;
}

int main()
{
    char buffer[32];
    int conv=base_change(1024,2,buffer);
    if (conv==0) printf("%s\n",buffer);
    return 0;
}
于 2010-10-02T07:49:53.217 に答える
2

ビットシフトを使用するこのスニペットを試すこともできます。

編集:(私はそれをよりポータブルにしました)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define BITS_IN_BYTE 8
#define INTEGRAL_TYPE unsigned int

void showBits(INTEGRAL_TYPE x) {
    int i;
    static int intSizeInBits = sizeof(INTEGRAL_TYPE) * BITS_IN_BYTE;
    static char symbol[2] = {'0','1'};
    char * binary = (char*) malloc(intSizeInBits + 1);

    memset(binary, 0, intSizeInBits + 1);

    for (i=0; i< intSizeInBits; i++) {
        binary[intSizeInBits-i-1] = symbol[(x>>i) & 0x01];
    }

    printf("%s\n", binary);
    free(binary);
}

int main() {
    showBits(8698513);
    return 0;
}

チッ!

于 2011-11-17T19:19:47.997 に答える
1

これは、整数のビットを出力するための非常に単純なソリューションです

int value = 14;
int n;
for (n=8*sizeof(int)-1;n>=0;n--) {
    printf("%d",(value >>n)&1);
}
于 2014-04-05T02:17:28.947 に答える
-1

これは showbits のヘッダー ファイルです。

 void showbits(unsigned int x)
    {
        int i;
        for(i=(sizeof(int)*5)-1; i>=0; i--)
            (x&(1u<<i))?putchar('1'):putchar('0');
        printf("\n");
    }
于 2016-04-25T11:18:35.730 に答える
-1

ここを見る必要があります

@downvoter cでも問題なく動作します。コードを C スタイルに再フォーマットするだけです。

#include <stdlib.h>
#include <stdio.h>
int main()
{
char buffer[20];
int  i = 3445;
_itoa( i, buffer, 2  );
printf("String of integer %d (radix 2): %s",i,buffer);
return 0;
}

* _itoa() を機能させるには、MSVC++ でファイルを .c として保存する必要があります。

于 2010-10-02T08:04:14.770 に答える
-3

たとえば、フロートのビットを印刷する場合は、次のようにすることができます。

float myFloat = 45.2;
for (int n=0;n<8*sizeof(float);n++) {
    printf("%d",(myFloat>>n)&1);
}
于 2010-10-02T07:23:20.650 に答える