2010-08-17 56 views

回答

7

你永远不改变n

不要试图将所有东西塞进一行,要稍微详细些,以便事情更清楚。

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

oops ...意识到我的错误!忘了修改n的值!谢谢.. – Laz 2010-08-17 06:30:30

+0

这将以相反顺序打印二进制数字...... – caf 2010-08-17 07:13:02

+0

当然这会以二进制向后打印数字(最低有效位在前)。上面的代码 – wcochran 2013-10-18 03:55:25

5

那是因为你没有改变n。

对于n = 25,我们有(n >> 1)= 12,因此它打印为零。而且,由于您不更改,所以会为所有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; 
} 
} 

但是它会打印颠倒二进制形式呈现。

1

您尚未修改n - 每当您将0x01n上的第二位进行比较时。

1

您不会更改循环内的n值。并且可能你想在移位之前测试最不重要的位。

2

你n为从未得到改变:

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

应该

if(n & 0x01) 

,并添加

n>>=1;k--;

而且这将产生逆向工程&二进制表示se订单。

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


} 

为@falagar说,结果将按照相反的顺序打印

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); 
} 
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"); 
} 
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表示数字的位。

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

打印任何十进制数的二进制等值 – manoj 2014-09-27 07:00:06

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(); 
    } 
} 
相关问题