SORU
23 EKİM 2010, CUMARTESİ


Nasıl C işleme N-C negatif C//sayı (%) modül operatörü kodu

C türevi diller benim pet Nefret Eder (bir matematikçi olarak)

(-1) % 8 // comes out as -1, and not 7

fmodf(-1,8) // fails similarly

En iyi çözüm nedir?

C şablonlar ve operatör yükleme imkanı tanır, ama bunların her ikisi de benim için karanlık sular. örnekler minnetle aldı.

CEVAP
23 EKİM 2010, CUMARTESİ


Önce bile edemiyor kullanan not (-1) % 8 == -1 gerçeği istiyorum. güvenebileceğiniz tek şey (x / y) * y ( x % y) == x. Veya geri kalan kısmı olumsuz olup olmadığını ancakuygulama tanımlı.

Şimdi neden şablonlar burada? İn için aşırı yüklenme ve uzun yapardı.

int mod (int a, int b)
{
   int ret = a % b;
   if(ret < 0)
     ret =b;
   return ret;
}

ve şimdi mod(-1,8) gibi hitap edebilirsin ve 7 olarak görünür.

Edit: benim kodunda bir hata buldum. Eğer b negatif ise bu bir işe yaramaz. Bu daha iyi olur bence

int mod (int a, int b)
{
   if(b < 0) //you can check for b == 0 separately and do what you want
     return mod(-a, -b);   
   int ret = a % b;
   if(ret < 0)
     ret =b;
   return ret;
}

Referans: paragraf 5.6 Madde 4 C 03:

İkili / operatör bölüm verir ve ikili % operatör ikinci tarafından ilk ifadenin bölümünden kalanı verir. Eğer / ya da % ikinci ifadenin ise davranışı tanımlı değil sıfır; aksi halde (a/b)*b%b eşittir. Eğer her iki işlenen sıfırdan büyük olursa, o zaman geri kalan negatif olmayan;eğer değilse, geri kalan tabela uygulama tanımlı.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • John Lynn

    John Lynn

    8 Ocak 2010
  • Attempts at least

    Attempts at

    1 Ocak 2007
  • Shantanu Sood

    Shantanu Soo

    3 Kasım 2008