SORU
2 EKİM 2008, PERŞEMBE


Nasıl bir tamsayı çift veya tek olup olmadığını kontrol edebilirim?

Nasıl eğer belirli bir sayıda C çift veya tek olup olmadığını kontrol edebilir miyim?

CEVAP
2 EKİM 2008, PERŞEMBE


(%) Modül operatörü ise 2 ile bölme yaparken kalan ... ... olmadığını kontrol etmek için kullanın:

if (x % 2) { /* x is odd */ }

Birkaç kişi x & 1 kullanıyor belirten yukarıdaki cevabımı eleştirdi "" ya da "daha verimli". daha hızlı Bu durum için inanmıyorum.

Meraktan soruyorum, bu iki önemsiz test çalışması program oluşturdum:

/* modulo.c */
#include <stdio.h>

int main(void)
{
    int x;
    for (x = 0; x < 10; x  )
        if (x % 2)
            printf("%d is odd\n", x);
    return 0;
}

/* and.c */
#include <stdio.h>

int main(void)
{
    int x;
    for (x = 0; x < 10; x  )
        if (x & 1)
            printf("%d is odd\n", x);
    return 0;
}

O zaman benim makinelerinden biri gcc 4.1.3 bu derlenmiş 5 farklı kat:

  • Hayır optimizasyon bayrakları ile.
  • -Os
  • -O2
  • -O3

Her derleme (gcc -S kullanarak) montaj çıktı inceledim ve her durumda, çıktı için.c ve mod.c aynıydı (onlar ve $1, �x Yönerge kullanılır). Bu bir özellik ve eski sürümleri kadar dayanıyor sanırım. yeni olduğundan şüpheliyim Ben de modern (son 20 yılda yapılan) olmayan gizemli derleyici, ticari ya da açık kaynak şüphesiz, böyle optimizasyon yoksun. Diğer Derleyiciler test ederdim, ama şu anda müsait değilim.

Başkası diğer soğutucu ve/veya platform hedefleri test etmek ister ve farklı bir sonuç çıkarsa, bilmek çok ilgi duyarım.

Son olarak, modül versiyonugarantilistandart tamsayı pozitif, negatif veya sıfır olup olmadığını, bu uygulama ne olursa olsun bu iş için imzalı tamsayı gösterimi. Bit-ve sürüm değil. Evet, tamamlayıcı bu gerçekten bir sorun değil yani biraz her yerde var, iki şey fark ettim.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • girleffect

    girleffect

    20 Mayıs 2008
  • PC Learning Zone - Computer Training

    PC Learning

    8 EYLÜL 2006
  • wwjoshdo

    wwjoshdo

    25 Mayıs 2009