2016-03-29 43 views
-4
int main() 
{ 
    double hexa_number; 
    double bitmask = 0x80; 
    double i; 
    printf("Enter 8 bit number in hexadecimal form: "); 
    scanf("%lf",& hexa_number); 
    for(i = 0; i <= 8; i++) 
    { 
     if(hexa_number&(bitmask >> i)) 
      printf("1"); 
     else 
      printf("0"); 
    } 
    return 0; 
} 

kullanarak artı bu sayının ikili gösterimini gösteriliyor Onaltılıdan ikiliye numarayı dönüştürebilir, ikili sayı 0 ve 1 yılların sayısının bir sayısı ile birlikte . dönüştürmek için başka yollar buldum ama bitmask ile değilnasıl ben bit maskesi

+0

herhangi bir yardım lütfen –

+0

hiçbir 'C# printf' var çünkü C, değil C# olarak bu yeniden etiketlediğinizden ettik. –

cevap

0

Sorun, bit maskesi için bir çift kullanmanız olabilir. Bence, özellikle de bir işaret biti, mantis ve 2 üsekten ibaret oldukları için, çiftler için çok anlam ifade etmiyorlar. Örneğin

, 8 >> 1 basitlik için işaretsiz iki bayt şamandıra hayal ve hayal, ilk bayt mantisi temsil eder 2.

bölme ile aynı güzel tutarlı işlemi olup 4'tür ve ikincisi (her ikisi de imzasız), sonra 7 * 2^4 (= 112) 0b00000111 00000100 olarak gösterilebilir. Eğer 1'i sağa kaydırırsanız, >> 1, bizim kongremize göre 0b00000011 10000010 alırsınız. şimdi 3 * 2^130. Bu tam olarak bir tamsayı sağa kaydırarak 2'ye bölünecek bir bölüm değil.

Derleyicim "hata: geçersiz işlenenleri ikiliye >> (çift ve imzasız)" numara.

Yani temelde şunu deneyebilirsiniz:

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

int main() 
{ 
    int hexa_number = 0; 
    unsigned num_bits = sizeof(int)*8; 
    unsigned bitmask = 1 << (num_bits - 1); 
    printf("Enter a number in hexadecimal form: "); 
    scanf("%i", &hexa_number); 

    unsigned k = 0; 
    unsigned num_ones = 0; 
    unsigned num_zeros = 0; 

    for(k = 0; k != num_bits; k ++) 
    { 
     if(hexa_number & (bitmask >> k)) 
     { 
      printf("1"); 
      num_ones ++; 
     } 
     else 
     { 
      printf("0"); 
      num_zeros++; 
     } 
    } 
    printf("\nNumber of ones is %i\nNumber of zeros is %i", num_ones, num_zeros); 
    return 0; 
} 
+0

Çok yardımcı olan çok teşekkürler Rokitansky. –

İlgili konular