Remainder Operator in Java Can Return Negative

According to mathematics, remainders are always positive. However, in java, when the remainder operation returns a nonzero result, it has the same sign as its left operand.  Though most mathematicians won’t agree, Java Language Specification still refers to % as a remainder operator only.

While doing through hand, we can get same result as in java by division (of absolute values) through subtraction and then giving the sign of first operand.

In division by subtraction, we subtract divisor from dividend as long as dividend is bigger than divisor, the remaining dividend is the remainder and number of subtractions is the quotient.

For example, 14%3 can be done as 14-3-3-3-3, which gives 2 as remainder and 4 as quotient. Also, (14%-3) is 2, (-14%3) is -2 and (-14%-3) is -2. Note that the sign of remainder is same as that of first operand and sign of second operand doesn’t have any significance. Also note that absolute values are taken (signs are ignored) for division by subtraction.  

A simple java program that does the same will be:

static int FindModulo(int divident, int divisor){

  int abs_divident = Math.abs(divident);

  int abs_divisor = Math.abs(divisor);
                       

  while(abs_divident>abs_divisor) {

    abs_divident = abs_divident - abs_divisor;

  }

  return abs_divident*(divident/Math.abs(divident));

}

The actual division operation that JVM implement might be slightly different, but the above rules holds well for all.

Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) Arrays (1) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (55) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (5) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (9) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (7) Javascript Frameworks (1) Java SE Professional (1) JPA 1 - Module (6) JPA 1 - Modules (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)