SORU
25 AĞUSTOS 2014, PAZARTESİ


≫>>= C operatör?

Bir bulmaca gibi bir arkadaşı tarafından verilen, bu C program aslında derler ve çalışır bir türlü anlamıyorum. >>>= Bu operatör ve garip 1P1 edebi nedir? Çınlama ve GCC test var. Uyarılar Yok ve çıkış "???"

#include <stdio.h>

int main()
{
    int a[2]={ 10, 1 };

    while( a[ 0xFULL?'\0':-1:>>>=a<:!!0X.1P1 ] )
        printf("?");

    return 0;
}

CEVAP
25 AĞUSTOS 2014, PAZARTESİ


Satır:

while( a[ 0xFULL?'\0':-1:>>>=a<:!!0X.1P1 ] )

digraphs :> ve ] [ sırasıyla çevirmek <:, içerir, eşdeğer için:

while( a[ 0xFULL?'\0':-1 ] >>= a[ !!0X.1P1 ] )

0xFULL değişmez 0xF aynı 15 hex); ULL sadece it's an unsigned long long literal belirtir. Bir boolean gibi herhangi bir durumda, doğru 0xFULL ? '\0' : -1 sadece 0 olan character literal '\0' olur.

Bu arada 0X.1P1 hexadecimal floating point literal 2/16 = 0.125 eşittir. Her durumda, sıfır gibi, aynı zamanda mantıksal değer olarak doğrudur, iki kere !! ile tekrar inkar 1 üretir. Böylece, her şeyi basitleştirir!

while( a[0] >>= a[1] )

23* *operatör bit-bit vardiya sağ işlenen tarafından verilen numarasını bıraktı işlenen ve sonuç döndürür compound assignment. Bu durumda, hakkı a[1] her zaman değerine denk geliyor yani 1: işlenen vardır

while( a[0] >>= 1 )

kullanır:

while( a[0] /= 2 )

a[0] başlangıç değeri 10'dur. Hemen sonra vites sonra 5, sonra (aşağı yuvarlama) 2, sonra 1 ve hangi noktada döngü sona erer 0, nihayet oldu. Böylece, döngü gövdesinin üç kez idam alır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Caramthros

    Caramthros

    10 AĞUSTOS 2007
  • Caroline Saquet

    Caroline Saq

    1 EKİM 2011
  • KIT KAT

    KIT KAT

    3 EKİM 2005