2010-02-06 22 views
6

Bir sayının ikili temsili için bu kodla karşılaştım. Kullanmak için ihtiyaç bilmek istiyorum! kodda. bu numara ile sen bitwise and Eğer sayısında MSB test edebilirsiniz nedenle zaman kullanılanBir sayının ikili gösterimi C

int main() { 
    int n,i; 
    unsigned flag = 1<<(sizeof(int) * 8 - 1);  

    printf("Input the number\n"); 
    scanf("%d",&n);  
    for(i=0;i<sizeof(int)*8;i++) {  
      printf("%d",!!(n & flag));  
      n = n << 1; 
    } 
    return 0; 
} 

cevap

7

bayrak, tek MSB seti ve temizlenmiş diğer tüm bitleri vardır. sayısı, MSB 0 vardı anlamına -

  • Sıfır:

    bitsel AND operatörü iki sonuç vardır.

  • Sıfır Olmayan - bu sayı, MSB'de numaralı numarada 1 olduğu anlamına gelir.

Şimdi

Non-zero -> 1 
Zero -> 0 

yüzden çifte yadsımasını kullanmak eşlemek için bir yol gerekir.

aynı şey

kullanılarak yapılabilirdi:

for(i=0;i<sizeof(int)*8;i++) { 

    (n & flag) ? printf("1"):printf("0"); 
    n = n << 1; 
} 
+2

MSB ', en anlamlı bitin – pug

+0

dönüşümlü printf (? ((N-flag) "1", "0")) =, C Bazı uygulamalarda' – Hasturkun

10

!! 1'e herhangi sıfır olmayan bir değer dönüştürmek ve sıfır olarak sıfır değerini bırakacaktır.

x = 0; 
y = 50; 
!x; // 1 
!y; // 0 
!!x; // 0 
!!y; // 1 

Zavallı adamın bool dökümüdür.

+0

, 0 olabilir veya -1 yerine 0 olacak veya 1. –

+1

Uygulama standartlara uygun değilse. Mevcut taslak standart 6.3.1.2'ye göre, "Herhangi bir skaler değer _Bool'e dönüştürüldüğünde, değer 0'a eşitse sonuç 0'dır, aksi halde sonuç 1'dir." –

+2

@ T.J. Kalabalık: Hayır. Mantıksal işleçlerin 0 veya 1 olarak değerlendirilmeleri garanti edilir. Spesifik olarak: "İşlenenin değeri, işlenenin değeri 0'a eşitse, işlenenin değeri 0'a eşit değilse, mantıksal olumsuzlamanın sonucu 0'dır." (C99 standardının 6.5.3.3/5'i) – jamesdlin

2

yazımını x != 0 olarak daha az karıştırırdım.

İlgili konular