2010-08-17 5 views
1

Jus проверить это program.Logically, кажется, хорошо, но его предоставление 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--; 
    } 
} 

ответ

7

Вы никогда не изменить n.

Не пытайтесь втирать все в одну строку, будьте немного более подробными, чтобы вещи были яснее.

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

oops ... осуществил мою ошибку! забыл изменить значение n! спасибо .. – Laz

+0

Это будет печатать двоичные цифры в обратном порядке ... – caf

+0

Конечно, это печатает номер в двоичном обратном порядке (младший значащий бит сначала). – wcochran

5

Это потому, что вы не меняете n.

Для n = 25 имеем (n >> 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; 
} 
} 

Однако он будет печатать двоичное представление в виде обратной.

1

Вы не изменяете n - каждый раз, когда вы сравниваете 0x01 со вторым разрядом на n.

1

Вы не изменяете значение n в цикле. И, вероятно, вы хотите протестировать наименее значимый бит перед переносом.

2

Ваш п никогда не получать изменения:

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

должен быть

if(n & 0x01) 

и добавить

n>>=1; после k--;

Кроме того, это даст двоичное представление в Rever 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

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(); 
    } 
} 
Смежные вопросы