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
Ö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ı.
Nasıl pozitif veya negatif bir sayı ol...
Nasıl pozitif veya negatif bir sayı ol...
Nasıl HTML kodu Sublime Text 2 kullana...
Nasıl bir dize bir sayı (yüzen) olup o...
Nasıl C rasgele tamsayı sayı üretmek m...