18 Haziran 2020 Perşembe

Modulo Arithmetic Operator - Integer Remainder (Bölümden Arta Kalan)

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.
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ı şöyle
The 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