SORU
1 EKİM 2014, ÇARŞAMBA


Operasyon "false < true" iyi tanımlanmış mı?

C belirtimi tanımlar:

  1. varlığını 'az' boolean parametre için operatör, ve eğer öyleyse,
  2. 4 parametre permütasyon sonucu?

Diğer bir deyişle, aşağıdaki işlemleri belirtimi tarafından tanımlanan sonuçların?

false < false
false < true
true < false
true < true

Benim kurulum (Otomotiv-7, gcc 4.8.2) , kodu ne beklediğiniz altında (0 olarak yanlış ve 1 doğru temsil eden C geçmişini göz önüne alırsak) tükürür:

false < false = false
false < true = true
true < false = false
true < true = false

Eminim çoğu (hepsi?) olmama rağmen Derleyiciler aynı çıktıyı verecektir, bu C belirtimi oluşturmaktadır? Ya kafamı allak bullak, ama belirtimi uyumlu bir derleyici doğru az yanlış olduğuna karar vermek için izin verilir?

#include <iostream>

const char * s(bool a)
{
  return (a ? "true" : "false");
}

void test(bool a, bool b)
{
  std::cout << s(a) << " < " << s(b) << " = " << s(a < b) << std::endl;
}

int main(int argc, char* argv[])
{
  test(false, false);
  test(false, true);
  test(true, false);
  test(true, true);
  return 0;
}

CEVAP
1 EKİM 2014, ÇARŞAMBA


TL;DR:

İşlemleri de taslak C standardına göre tanımlanmıştır.

Ayrıntılar

9* *draft C standard bölümüne girerek görebilirsinizİlişkisel operatörlerdiyor ki (vurgu ileriye dönük benim):

işlenen aritmetik sahip olacaktırnumaralandırma veya işaretçiyazınya yazın std::nullptr_t. Operatörler &; (daha önce), ^ lt . (daha fazla), <= (eşit veya daha az), ve >= (büyüktür ya da eşittir) tüm verim yanlış veya doğru. Sonuç türü bool

ve bools 3.9.1 Temel türlerinden arithematic türleri vardır

Türleriboolchar, char16_t, char32_t, wchar_t, imzalı ve imzasız tamsayı türleri toplu olarak integral türleri denir.

ve

İntegral ve değişken türleri topluca aritmetik denir türleri.

true false 2.14.6 Boolean sabitleri gelen boolean sabitleri

boolean-literal:
    false
    true

Geri 5.9 ilişkisel operatörler mekaniği daha fazla görmek bölüm olacak, diyor

Her zamanki aritmetik dönüşümler aritmetik veya numaralandırma türünü işlenen yapılmaktadır.

her zamanki aritmetik dönüşümleriolan bölümde diyor ki 5:

Aksi takdirde, integral promosyonlar (4.5) her iki işlenen üzerinde yapılır

ve Bölüm 4.5 diyor ki:

Bool türü bir prvalue int türünde bir prvalue dönüştürülebilir, yanlış olma sıfır ve gerçek bir olmak.

ve benzeri ifadeler:

false < false
false < true
true < false
true < true

bu kurallar haline kullanarak:

0 < 0
0 < 1
1 < 0
1 < 1

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DeAdPiXel6667

    DeAdPiXel666

    2 Ocak 2010
  • newport83

    newport83

    19 HAZİRAN 2006
  • RiverCityGraphix

    RiverCityGra

    6 Ocak 2012