Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向后打印这个二进制代码。在C中 #包括 #包括 /*转换为二进制*/ int main() { 无符号整数小数=0; printf(“输入要转换为二进制的数字。\t”); scanf(“%d”、&decimalNUM); fflush(stdin); baseConv(小数); getchar(); 返回0; } baseConv(无符号整数n){ 如果(n==0); 而(n>0){ printf(“%d”,n%2); n=n>>1; } 返回0; }_C_Binary_Base - Fatal编程技术网

向后打印这个二进制代码。在C中 #包括 #包括 /*转换为二进制*/ int main() { 无符号整数小数=0; printf(“输入要转换为二进制的数字。\t”); scanf(“%d”、&decimalNUM); fflush(stdin); baseConv(小数); getchar(); 返回0; } baseConv(无符号整数n){ 如果(n==0); 而(n>0){ printf(“%d”,n%2); n=n>>1; } 返回0; }

向后打印这个二进制代码。在C中 #包括 #包括 /*转换为二进制*/ int main() { 无符号整数小数=0; printf(“输入要转换为二进制的数字。\t”); scanf(“%d”、&decimalNUM); fflush(stdin); baseConv(小数); getchar(); 返回0; } baseConv(无符号整数n){ 如果(n==0); 而(n>0){ printf(“%d”,n%2); n=n>>1; } 返回0; },c,binary,base,C,Binary,Base,我现在知道怎么做了,但它是反印的。我该如何反转它呢?如果您想反转这样的操作,一种方法是使用堆栈数据结构 不要打印主循环中的值,而是将它们推到堆栈中 然后,完成后,从堆栈中弹出一个项目并打印它,然后继续这样做,直到堆栈为空。堆栈被称为后进先出结构(last-in,first-out),它是一种方便的存储方式,用于以后按与生成顺序相反的顺序进行检索 伪代码: #include <stdio.h> #include <math.h> /* converts to binary

我现在知道怎么做了,但它是反印的。我该如何反转它呢?

如果您想反转这样的操作,一种方法是使用堆栈数据结构

不要打印主循环中的值,而是将它们推到堆栈中

然后,完成后,从堆栈中弹出一个项目并打印它,然后继续这样做,直到堆栈为空。堆栈被称为后进先出结构(last-in,first-out),它是一种方便的存储方式,用于以后按与生成顺序相反的顺序进行检索

伪代码:

#include <stdio.h>
#include <math.h>
/* converts to binary */

int main()
{
    unsigned int decimalNUM = 0;
    printf("Enter a number to be converted to binary.\t");
    scanf("%d", &decimalNUM);
    fflush(stdin);
    baseConv(decimalNUM);
    getchar();
    return 0;
}
baseConv(unsigned int n){
if (n == 0) ;
      while (n > 0){
      printf("%d", n%2);
      n = n >> 1;
              }
return 0;
}

我还要补充一点,声明:

def baseConv (n):
    create stack s
    while n > 0:
        push n % 2 onto s
        n = n >> 1
    while not empty(s):
        pop n from s
        print n

根本没有什么用处。

你可以避免堆栈

您是向后的,因为您从最低的数字开始,转换它,然后打印它

如果你先算出最高的部分,你可以反过来

为基数查找整数的最大除数,例如二进制0x8000

把你的数字除以这个除数 如果为0,则不打印任何内容。。如果不是,请开始打印 将除数除以基数。。。。例如二进制除数>>=1;
在除数为0之前,您可以通过打开所有位(~无符号(0)),然后将该值与右移的值进行异或运算来获得最高有效位的值。然后,测试从msb到lsb的每个位

if (n == 0);

分配一个足够大的字符串并用“0”填充,将1按相反顺序放入字符串中,找到第一个“1”,然后从该点开始打印字符串

for (unsigned x = ~unsigned(0) ^ (~unsigned(0) >> 1); x; x >>= 1)
    putchar(x & n ? '1' : '0');

我将数字放入一个数组中;然后向后打印数组(将数组初始化为所有零)。你会得到一些额外的前导零;但是对于二进制数来说这并不奇怪。步骤1:在发布代码之前,修复编译器警告。第二步:在你的问题中加入代码——除非它比这多出很多行。
int cursor, lead_one;
char *buffer = malloc(sizeof(unsigned int)*8 + 1);
memset(buffer, '0', sizeof(unsigned int)*8);
buffer[sizeof(unsigned int)*8] = 0;

for (lead_one = cursor = sizeof(unsigned int)*8 - 1; n > 0; cursor--) {
    if (n & 1) {
        buffer[cursor] = '1';
        lead_one = cursor;
    }
    n >>= 1;
}
printf(buffer+lead_one);