Názor ke článku Počítání s přetečením v C od Jet - Ovšem tohle nebude fungovat minimálně pro tento případ: A=0x80,...

  • 2. 10. 2014 21:29

    Jet (neregistrovaný)

    Ovšem tohle nebude fungovat minimálně pro tento případ:
    A=0x80, B=0xff a carry=true
    vysledek bude C=0x80, v signed je -128, což bude menší než 0
    takže
    (int)(a | b) < 0 je true
    AND
    (int)c >= 0 je false
    =
    carry je false, ale mělo být true

    Nemysli si, že jsem nepřemýšlel o tom, jak to udělat jednodušší, ale přičtení současně CY a 0xff dělá problémy.
    Asi by to šlo pomocí pár xorů a andů, ale složitostí se to pak už blížilo tomu mému programu na 12 řádků.
    A nebo je v tom algoritmu ještě stále někde chyba a nevidím ji.