程序在不使用格式说明符的情况下打印数字的二进制等效项

时间:2010-08-17 06:25:03

标签: c

Jus看看这个程序。从逻辑上来看似乎很好,但是它为所有东西提供了000000000000000000000

#include<stdio.h>
void main()
{
  int n=25,k=32;
  printf("binary equivalent\n");
  while(k!=0)
  {
    if((n>>1&0x01)!=0)
      printf("1");
    else
     printf("0");
    k--;
  }
}

11 个答案:

答案 0 :(得分:7)

您永远不会更改n

不要试图把所有东西塞进一行,再多一点,以便事情更清楚。

while(k!=0)
{
 if((n & 0x01) != 0)
  printf("1");
 else
  printf("0");
 k--;
 n >>= 1;
}

答案 1 :(得分:5)

那是因为你没有改变n。

对于n = 25,我们有(n>&gt;> 1)= 12因此它打印为零。而且由于你不改变n,它为所有k打印零。

您可以通过以下方式更改它:

#include
void main()
{
int n=25,k=32;
printf("binary equivalent\n");
while(k!=0)
{
 if((n & 0x01)!=0)
  printf("1");
 else
  printf("0");
 k--;
 n = n >> 1;
}
}

然而,它会以反向形式打印二进制文件。

答案 2 :(得分:2)

你的n永远不会改变:

if((n>>1&0x01)!=0)

应该是

if(n & 0x01)

并添加

n>>=1;

之后

k--;

此外,这将以反向顺序生成二进制表示。

答案 3 :(得分:1)

每次将n0x01上的第二位进行比较时,您都不会修改n

答案 4 :(得分:1)

您不会在循环中更改n的值。也许你想在转移之前测试最低有效位。

答案 5 :(得分:1)

我认为这将有助于结果与发布的其他海报相同

#include<stdio.h>
int main()
{
int n=25;
int k=32;
printf("binary equivalent\n");

 for (int i=0;i<32;i++){
 if((n&1)!=0)
  printf("1");
 else
  printf("0");

 n>>=1;
 }


}

as @falagar表示结果将以相反的顺序打印

答案 6 :(得分:1)

/*
 * Author: Andrey Vlassov
 * Date: Thu Apr 19 03:10:49 UTC 2012
 *
 * Description:
 *      An expample program demonstrating how
 *      to convert decimal integer number to
 *      binary representation
 *
 * NOTE:
 *      For simplicity additional check left out
 *
 */

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

int main(int argc, char *argv[])
{

    char help[] = ">>> Please provide an integer number as argument!!!";
    char id[]   = "d2b  (c) Andrey Vlassov     Apr 18, 2012 8:15PM PST";

    if( argc < 2 ) {
        printf("%s\n", help);
        exit(0);
    }

    printf("\n%s\n\n", id);

    int n   = atoi(argv[1]);

    int i, bites, bits, mask;

    printf("Number is %d\n", n);
    printf("size: %d bites\n", bites=sizeof(n));

    printf("dec: %d\n", n);
    printf("hex: %#x\n", n);
    printf("oct: %#o\n", n);
    printf("bin: b");

    bits = bites*8-1;

    mask = 0x01 << (bits-1);

    for( i=0; i<bits; i++) {
        printf("%d", ( n & mask ? 1 : 0 ) );
        mask >>= 1;
    }

    printf("\n\n");

    exit(0);
}

答案 7 :(得分:0)

// how to print binary number representation of an integer
// using bitwise operators
//
// oon
// 18.04.2013
// Refs
// http://www.cs.northwestern.edu/~wms128/bits.c
// http://www.cs.cmu.edu/~guna/15-123S11/


#include <stdio.h>

#define no_of_bits_in_a_byte 8
#define get_bit(w,i) ((w>>i)&1)

void print_binary(signed int x);

int main()
{
   print_binary(2);     // 00000000000000000000000000000010
   print_binary(-2);    // 11111111111111111111111111111110
   return 0;
}

void print_binary(signed int x)
{
   int i;
   int no_of_bytes = sizeof(x);

   for (i=no_of_bytes*no_of_bits_in_a_byte-1; i>=0; i--) {
        printf("%d",get_bit(x,i));
   }
   printf("\n");
}

答案 8 :(得分:0)

/*
 * print_binary2.c
 *
 * oon
 *
 * 19.04.2013
 */

// http://www.cs.northwestern.edu/~wms128/bits.c
// http://www.cs.cmu.edu/~guna/15-123S11/

#include <stdio.h>

#define no_of_bits_in_a_byte 8
#define get_bit(w,i) ((w>>i)&1)

void print_binary2(signed int x, unsigned int n);
int check_bits_fit_in_2s_complement(signed int x, unsigned int n);

void main()
{
    print_binary2(2,2);    // output: The signed integer 2 cannot be represented by 2 bit(s) in two complements form.
    print_binary2(2,3);    // output: 010
    print_binary2(-2,2);   // output: 10
    print_binary2(-2,3);   // output: 110
}

int check_bits_fit_in_2s_complement(signed int x, unsigned int n) {
  int mask = x >> 31;

  return !(((~x & mask) + (x & ~mask))>> (n + ~0));
}

void print_binary2(signed int x, unsigned int n)
{
    // check if x can be represented by n bits in two's complement form.
    if (check_bits_fit_in_2s_complement(x,n)) {
        int i;

        for (i=n-1; i>=0; i--) {
            printf("%d",get_bit(x,i));
        }

        printf("\n");
    } else {
        printf("The signed integer %d cannot be represented by %u bit(s) in two complements form.\n",x,n);
    }
}

上面的代码显示了如何以二进制补码形式打印二进制数,其中 n 表示位数。

答案 9 :(得分:0)

int binary(int n)
{
 if(n/2)
  binary(n/2);
   printf("%d",n%2);
}
void main()
{
 int n;
   printf("enter any number");
    scanf("%d",&n);
     binary(n):
     getch();
}

答案 10 :(得分:0)

试试这个!

#include<iostream>
#include<stack>
using namespace std;

int main(){
    stack<int> st;
    int n=25, k=32;

    while(k!=0){
        if((n&0x01)!=0)
            st.push(1);
        else
            st.push(0);
        k--;
        n=n>>1;
    }

    while(!st.empty()){
        cout<<st.top();
        st.pop();
    }
}