代码之家  ›  专栏  ›  技术社区  ›  Laz

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

c
  •  1
  • Laz  · 技术社区  · 14 年前

    看看这个program.Logically 它看起来很好,但它给了000000000000000的一切

    #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 回复  |  直到 11 年前
        1
  •  7
  •   Anon.    14 年前

    你永远不会改变 n

    不要试图把每件事都塞进一行,要更详细一点,这样事情就更清楚了。

    while(k!=0)
    {
     if((n & 0x01) != 0)
      printf("1");
     else
      printf("0");
     k--;
     n >>= 1;
    }
    
        2
  •  5
  •   falagar    14 年前

    对于n=25,我们有(n>&燃气轮机;1) =12,因此打印零。因为你不改变n,所以所有的k都是0。

    您可以按以下方式进行更改:

    #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;
    }
    }
    

        3
  •  2
  •   codaddict    14 年前

    你的n永远不会改变:

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

    if(n & 0x01)
    

    并添加

    n>>=1; k--;

    这也将产生二进制表示 颠倒 命令。

        4
  •  1
  •   qrdl    14 年前

    n -每次你比较 0x01 第二位打开时 .

        5
  •  1
  •   stacker    14 年前

    在循环中不改变n的值。可能你想在移位前测试最低有效位。

        6
  •  1
  •   Andrey Vlassov    12 年前
    /*
     * 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
  •  1
  •   R. Martinho Fernandes    12 年前

    #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;
     }
    
    
    }
    

    正如@falagar所说,结果将按相反顺序打印

        8
  •  0
  •   oon    11 年前
    // 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");
    }
    
        9
  •  0
  •   oon    11 年前
    /*
     * 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 表示位数。

        10
  •  0
  •   manoj    10 年前
    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();
    }
    
        11
  •  0
  •   AkashGupta    8 年前

    试试这个!

    #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();
        }
    }