4

在阅读一本名为“Let us C”的书时,我读到showbit()存在一个可以向您显示数字位的函数。没有提到任何特殊的头文件。在互联网上搜索它并没有发现任何有用的东西。有这样的功能吗?我希望它打印十进制数字的二进制。否则请给我一个替换功能。谢谢

4

8 回答 8

3

在您的计算机中,所有整数实际上都是二进制的。只是当您尝试使用 printf 和“%d”打印它时,它会变成一个字符串,该字符串是该值的十进制表示。如果您想知道它在其他基数(例如基数 2 或二进制)中的样子,您要么必须提供正确的 printf 格式字符串(如果存在)(例如“%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 回答
0

“Let Us C”一书并未将其定义为内置函数。showbits() 函数在本书的后面部分定义为一个完整的用户定义函数,正如我个人所经历的那样。这个答案是给那些还没有读到本书后面的部分并且被困在书中第一次出现的函数的人的答案。

于 2020-09-22T11:23:32.267 回答
-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;
}

*您需要在 MSVC++ 中将文件另存为 .c 才能使 _itoa() 工作。*

于 2010-10-02T08:04:14.770 回答
-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

不,没有预先构建的功能,您不需要包含任何特定的头文件。您必须提供函数 showbits(int) 的实现。

#include <stdio.h>
void showbits(int);
int main()
{
    int j,k;
    for(j=0;j<=11;j++)
    {
        printf("\nBinary value of decimal %d is :",j);
        showbits(j);

    }
    return 0;
}
showbits(int n){
    int i,k,andmask;
    for(i = 15;i>=0;i--){
        andmask = 1<<i;
        k = n & andmask;
        k==0 ? printf("0"):printf("1");
    }
}
于 2017-11-11T16:45:25.097 回答
-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 回答