Потвърждавам обяснението на Даниел.
Според общоприетата дефиниция за остатък, остатъкът от делението на две цели числа a и d е единственото цяло неотрицателно число 0 ≤ r < |d|, за което съществува цяло число q (частно), така че a = q.d + r. В случая d = 3, a = -1, q = -1 => r = 2.
За съжаление, операцията % в C++ не отговаря точно на тази дефиниция. Подробно изследване на вариантите за дефиниране на частно и остатък, можете да прочетете в тази статия.