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

  • EminemVEVO

    EminemVEVO

    12 Mayıs 2009
  • REK Roth Productions

    REK Roth Pro

    8 Ocak 2011
  • Rootjunky.com

    Rootjunky.co

    22 EKİM 2011