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