Giriş
Bölüm sonucunda kalanı bulmak anlamına gelir. Bu işlem eskiden eksi sayılar için net olarak tanımlı değildi.
Eksi Sayılar
Örnek - Eski Sayı + Int
Şöyle yaparız. Çıktı olarak -4 alırız.
Şöyle yaparız. Çıktı olarak 5 alırız.
Eski Kodlar
Açıklaması şöyle. Eski kodlarda -a % b her zaman artı bir sonuç verirdi.
Bölüm sonucunda kalanı bulmak anlamına gelir. Bu işlem eskiden eksi sayılar için net olarak tanımlı değildi.
Eksi Sayılar
Örnek - Eski Sayı + Int
Şöyle yaparız. Çıktı olarak -4 alırız.
cout << -4 % 7 << endl;
Örnek - Eski Sayı + size_tŞöyle yaparız. Çıktı olarak 5 alırız.
vector<int> v = {1, 2, 3, 4, 5, 6, 7};
int i = -4;
cout << i % v.size() << endl;
Açıklaması şöyleThe operands of % undergo the usual arithmetic conversions to bring them to a common type, before the division is performed. If the operands were int and size_t, then the int is converted to size_t.
...
If size_t is 64-bit then -4 would become 18,446,744,073,709,551,612 and the result of this % 7 is 5 which you saw.
Eski Kodlar
Açıklaması şöyle. Eski kodlarda -a % b her zaman artı bir sonuç verirdi.
It's likely your teacher is still used to earlier times, when the result of % with negative operands was differently defined. On some old systems (including, notably, early Unix on a PDP-11, where Dennis Ritchie originally developed C), the result of a % b was always in the range [0 .. b-1], meaning that -123 % 10 was 7. On such a system, the test in advance for n < 0 would be necessary.
Hiç yorum yok:
Yorum Gönder