3.2 — Arithmetic operators

Unary arithmetic operators


Operator Symbol Form Operation
Unary plus + +x Value of x
Unary minus - -x Negation of x





Binary arithmetic operators


Operator Symbol Form Operation
Addition + x + y x plus y
Subtraction - x - y x minus y
Multiplication * x * y x multiplied by y
Division / x / y x divided by y


Division and modulus (remainder) need some additional explanation.

Integer and floating point division




Using static_cast<> to do floating point division with integers



This produces the result:

int / int = 1
double / int = 1.75
int / double = 1.75
double / double = 1.75

Modulus (remainder)




This results in:


We’ll discuss while statements in a future lesson.




Arithmetic assignment operators

Operator Symbol Form Operation
Assignment = x = y Assign value y to x
Addition assignment += x += y Add y to x
Subtraction assignment -= x -= y Subtract y from x
Multiplication assignment *= x *= y Multiply x by y
Division assignment /= x /= y Divide x by y




Where’s the exponent operator?




Hint: You’ll need to use if statements and the comparison operator (==) for this program. See section 2.7 -- Chars if you need a refresher on how to do this.


1) Show Solution

2) Show Solution

3.3 -- Increment/decrement operators, and side effects
3.1 -- Operator precedence and associativity

85 comments to 3.2 — Arithmetic operators

  • Allen01

    Working on exercise 2), I first tried the code below. It compiled but when run, the command prompt only displayed: “Press any key to continue…” Shouldn’t it have displayed a “1” since it did return as true?int main()
    using namespace std;

    bool IsEven(int x);
    int x = 4;

    if (x % 2 == 0)
    return true;
    return false;

    return 0;

    I experimented a bit a finally got the code below to work:int main()
    using namespace std;

    bool IsEven(int x);
    int x = 4;

    if (x % 2 == 0)
    cout < < "My name is Even Steven" << endl; else cout << "My name is NOT Even Steven" << endl; return 0; }

    This time, the output was “My name is Even Steven”, showing that 4 was an even integer.

    Why would it not output a 1 for the true condition in the top code?

    • The return value of main is passed back to whomever launched your program (either another program, or the operating system). What happens with this value is up to the caller. If you want this value to print out, you should print it before you return it.

    • See ++

  • Allen01

    Ok, figured it out, adjusted the main cout based on the IsEven condition.

    bool IsEven(int x)
        // if x % 2 == 0, 2 divides evenly into our number
        // which means it must be an even number
        if (x % 2 == 0)
            return true;
            return false;
    int main()
    using namespace std;
    cout < < "Enter a Number" << endl;
    int x;
    cin >> x;
    if (IsEven(x))
    	cout < < "Even integer, returned true" << endl;
    	cout << "odd interger, returned false" << endl;
    return 0;
  • ndr

    Is there anything wrong with a function like this? Other than if 0 is entered?

  • Kurt

    First and foremost thank you so much for the tutorial. I have been wanting to get back into C++ for a long time, it has been ten years since I coded. Your tutorials have helped me get back into it. As for question number two on the quiz, I probably wrote a lot more than I had to for getting the job done, but I understand it.

    • Kush

      In your code, I presumed your casting was done to prevent errors, which occurs when a character is enetered when we ask for integer.
      It generally crashed out programs… and I never knew how to get around it…
      so, a little help in this program would be appreciated.

  • Chiamaka

    When i tried to compile the program that you made for question 2, it would not compile, there was a problem when it was linking, it said:” 1 unresolved externals”

  • Sam

    I got this on first try and it worked.

  • Simplified version of the code

  • Thom

    Here’s the briefest answer to #2 I could come up with:

  • Bob

    I’m using this tutorial to teach myself c++. So far it’s been pretty good. I have a question about arithmetic operators in regard to powers. How does one square or cube or pentuple a number without actually mulitplying the number that many times? In other programing languages one can use the ^ symbol to indicate “raised to the power of” so that a number square could be represented as x^2 and a pentupled number can be represented as x^5.

  • BorisTheSpider

    I’m using Code::Blocks, and if I run my program from the last chapter’s quiz and enter 0 as the second number (named dY in the example answer) and choose the division sign (/), it doesn’t crash. Rather, it tells me the answer is “Infinity”.

    I’m not sure if that’s compiler-specific or what, but I figured it was worth noting.

  • Stephan

    Just an aside.

    I’m using Code::Blocks and I try out many of the examples of code offered up by contributors (excellent stuff - teaches me loads of what not to do . . . ;-)) and examples in the tutorials.
    I noticed that the terminal window says “Process returned 0 execution time : 3.102 s(or what ever)” Yet the program seems to be instant (certainly not X seconds) . . . Just curious.

    Prince of Darkness
    Me + Electrickery = Smoke 😉

  • RobP

    Here’s my attempt at the even/odd program. Works pretty well. Side effects may include nausea, vomiting, heartburn, burning urination, and the desire to consider Rick Perry a valid presidential candidate. Ask your doctor if RobP’s solution is right for you.

    // Workbench.cpp : Space to test snippets or programs that don’t need to be saved.
    #include “stdafx.h”

    int main()
    using namespace std;

    int x;
    cout << "Enter a number:" <> x;
    if (x % 2 == 0)
    cout << "You entered " << x << " which is even." << endl;
    else cout << "You entered " << x << " which is odd." << endl;

    return 0;
    } // end of main()

  • bacia

    Are there operators for percents, powers, and roots?

    • bacia

      Unfortunately I can’t make a program which solves quadratic equations without square roots or powers because the quadratic formula uses a square root. bummer

      • profanegod

        bacia - it’s pretty easy to formulate best guesses on square roots. It has to do with averaging the quotients and guesses. Here’s a mathematical example.

        Find sqrt(9):

        Guess1: 1 9/1 = 9
        Average1: (9+1)/2 = 5

        Guess2: 5 9/5 = 1.8
        Average2: (5+1.8)/2 = 3.4

        Guess3: 3.4 9/3.4 = 2.647
        Average3: (2.647+3.4)/2 = 3.0235

        Guess4: 3.0235 9/3.0235 = 2.977
        Average4: (3.0235+2.977)/2 = 3.00025

        As you can see the answer for principal roots by this method aren’t as clean as they can be. But this process can be done on a computer with a high degree of precision after only a few iterations. Pretty much all you will need is a for or while loop (or recursive procedure), and the + and / operators.

      • see--

        use the math library,u will have to include it first

  • HarrisonTZ

    I know that a separate function is supposed to be used for #2, but it really is as simple as

    #include “stdafx.h”

    int main()
    using namespace std;
    cout <> x;

    if (x % 2 == 0)
    cout << "Yup, " << x << " is even!\n";
    cout << "Sorry, " << x << " is odd.\n";

    Try it out. Works perfectly.

  • uscfan1990

    int isEven()
    cout << "Please input a number to check: ";
    cin >> nNumber;
    if (nNumber % 2 == 0)
    cout << "That number is even!\n";
    cout << "That number is not even!\n";
    return 0;

    I didn’t use the bool data type… didn’t even think about it when I wrote the code >_> This works though lol.

  • Catreece

    Ugh this one was rough. Not doing the function in #2, but actually trying to get it to read the output since I'd forgotten how booleans are called in a really weird way compared to integers.

    I'd been trying to get it to read the output as true or false, and then later trying to force it to register as an integer of 1 or 0. Eventually went back to chapter 2.6 to see what I was doing wrong and discovered that feeding a boolean output into an if/then/else statement requires only stating you want to use a boolean at all, rather than defining it.

    It kind of makes sense when thinking about it, since the structure of an if statement assumes true for the top statement and false for the else statement, it was just surprising that I couldn't manually tell it "if bool = true" like would be normal with an integer.

    The 2.6 example is:

    bool b(true);
    if (b)
        cout << "b is true" << endl;
        cout << "b is false" << endl;

    I kept trying to get it to do essentially the following:

    if b = true
        cout << "b is true" << endl;
        cout << "b is false" << endl;

    It makes sense now that I'm thinking about it, just reaaaaally weird that it won't accept the long form we've been using with integers at all, and only accepts the shorthand form for booleans. I know it's more efficient, I just hate the lack of consistency. Oh well, I'll live. =P

    • Alex

      You can do an explicit comparison with a boolean within an if statement. You’re just using the wrong operator to try to do that. Instead of the assignment operator (=), you need to use the comparison operator (==).

      The correct form is:

      It turns out that “b==true” is the same as “b”:

      Value of b b b==true
      true true true
      false false false

      So it’s easier just to use “b” than “b==true”.

      • Catreece

        Oh crap, thanks. I'd been trying to use the == originally at first, but had phrased it entirely wrong. When I tried re-writing it I'd changed it to just =, oops.

        Still, thanks for the correction. I'll eventually memorize all these little rules somehow! …No I won't. I still can't even spell very well in English, despite being an author and teaching creative writing classes. You'd think there would be some translation of skill there, but nupe.

        Fortunately I've already started a cheat sheet for C++ of the things that I constantly forget for quick reference when things break and I can't figure out why. =P   I just hope I'm not the only one who has to rely on cheat sheets religiously. XD

  • Neel

    Hey i ran this program and i got the answer, i just found it weird that i barely used the main() function.

    #include "stdafx.h"


    int Even()
        using namespace std;
        bool even(true), odd(false);
        int x;
        cout<<"type number to check"<<‘n’;
        return 0;

    int main()
        return 0;

  • James

    "A warning about integer division and modulus with negative numbers

    If either or both operands of integer division are negative, the compiler is free to truncate up or down! Most modern compilers round towards 0. For example, -5 / 2 can evaluate to either -3 or -2, depending on whether the compiler rounds down or rounds toward 0.


    If this is the case, then how should I divide two integers if one or more of the operands are negative?

  • Alex

    I’ve updated the section slightly to indicate that this behavior has been changed in C++11. In C++11, integer division always rounds toward 0, and a % b always takes the sign of a. So in both cases, the behavior is now well-defined.

    • Stack


      Can you explain this a bit more please?

      If I divide -5 by 2 the answer should be -2 1/2 or -2.5 or -2r1. I don’t see how a compiler could get a remainder of 2 and much less 3.

      Lastly, in mathmatics I was taught that it doesn’t matter where the - sign was at. If there were an even number, the result was positve, if an odd then the result was negative. Thus -5/2 is the same answer as 5/-2. Taking the sign of a could very well give me a wrong answer in the second case!

      Any clarification would help.

      Thanks very much for this site. I lightly programmed in C/C++ many years ago, but I haven’t been doing anything with C/C++ in the last 4 years. I was helping a friend working on a project where he is trying to use the new C++11 and we stumbled onto the site. I started at the beginning just to see if anything jumped out at me. It is amazing how much I have apparently forgotten…This is amazing!

      • Alex


        I think you misinterpreted the statement, “For example, -5 / 2 can evaluate to either -3 or -2, depending on whether the compiler rounds down or rounds toward 0”. This statement is talking about integer division, not using the modulus operator.

        For more information about why a % b takes the sign of a in C++11, see this thread. I hope you like mathematical proofs. 🙂

  • Twisted Code

    "Note that trying to divide by 0 (or 0.0) will generally cause your program to crash, as the result are undefined!"
    Looks like lime cat’s lime’s I/O buffer got empty again, or something. Seriously, that thing needs an upgrade.

  • Eric

    I wrote a version of the number printing program that lines them all up nicely, just for fun.

    Is there a way I could’ve done what I did more optimally?

    • Lyle

      Here’s a stretch yourself solution …
      1) Your main should have a return statement
      2) here’s a redo of your printNumbers - need to add this one header <iomanip>
      3) “++i” is in the next chapter 😉

  • techsavvy....aye

    Is this okay-

  • tranmonglong

    bool isEven(int x)
        return (x % 2) == 0;

    Hi Alex.I think writing funtion like this is short but is it good because it is may be complicate to comprehend when we read it again .Thank you so much

  • OKlandshire

    Hi Alex and thanks for the great tutorials. Although i have a question. I don’t get it. truncate up or down or towards 0.In C++11 who i am interested whats is the correct answer?
    -5 / 2  !=  5 / (-2) ?
    -5 / 2  ==  (-1)* (5 / 2) ???? = -1???
    5 / (-2) == (-2) + (+2) + (+2) + (+2) = 4???  and remainder 1???

    I am a bit confused….

    • Alex

      I’ve updated the wording in the lesson to try and make this more clear. In C++11, integer division always truncates towards 0 (or put more simply, the fractional component is dropped).

      In normal math, -5 / 2 would be -2.5, but C++11 drops the fractional component for integer division, so you get -2.

  • gigi

    Hi Alex
    In your examples you use:

    Can be changed to:


  • person

    So is the first number within the parenthesis of pow always the base and is the second number always the exponent?

  • Gayan

  • Jim

    Wow! Quiz 1 was a doozy!
    You really have to pay close attention to precedence and associative rules!
    Even if you use parenthesis this one was hard to figure out.

    I got it wrong, but Thank You for explaining this one in detail and giving us the precedence chart you put up earlier.

  • its to nice bro . :)) Have Fun  ! 😀

  • #include<iostream>
    using namespace std;
    main ()
    char gender;
    float Bodweight,Wrist,Waist,Hip,Forearm,A1,A2,A3,A4,A5,B2,B,Bodfat,Bodfatp;
    cout<<"Know your body fat"<<endl;
    cout<<"M - Male."<<endl;
    cout<<"F - Female."<<endl;
    cout<<"Choose your gender:";
    if ((gender==’F’)||(gender==’f’))

    cout<<"Enter your body weight:";
    cout<<"Enter your wrist measurement:";
    cout<<"Enter your waist measurement:";
    cout<<"Enter your hip measurement:";
    cout<<"Enter your forearm measurement:";

    cout<<"Your body fat is:"<<Bodfatp;


    cout<<"Enter your body weight:";
    cout<<"Enter your wrist measurement:";

    {cout<<"Not in the code";}

    return 0;

  • Pravasi Meet

    The semantics of += (add assignment operator) are different in C & C++. += operator returns lvalue (locator value) in C++ but not in C. That’s why following program is valid in C++ but invalid in C.

    When you compile above program in C the compiler gives you following error:
    [Error] lvalue required as left operand of assignment

  • Josh

    Is this acceptable? Or really, is this less efficient in any way?

    • Alex

      Is it acceptable from what perspective? Does it work? Yes. Does it meet the quiz requirements? No. The quiz asked you to create a function named isEven() and you didn’t.

  • Nortski

    Thank you so much for these tutorials. I’ve tried a number of times to get my head around programming over the years. Decided to give it another go and these tutorials are fantastic!

    This was my solution to question 2. More coding than was needed but works fine. Streamlining will come with experience 🙂

  • Simon

    My version ; still too messy but added a twist 😉

    • Simon

      And here is a different version of your counting, C++ starts to get funny… thanks a lot for all the tutorial and really really well done quizz.

  • sharaf

    why can’t we use in this way?

  • Kyle Roth

    why does this ask me for an integer 4 times?

    [#include "stdafx.h"
    #include <iostream>

    int getNumber()
        std::cout << "enter and integer";
        int x;
        std::cin >> x;
        return x;


    int main()
        if (((getNumber()) % 2) == 0)
            std::cout << getNumber() << "is even\n";
            std::cout << getNumber() << "is odd\n";
    } ]

    • Alex

      4 times? It should only ask 3 times. And this happens because getNumber() asks the user to enter an integer each time it is called. And you’re calling it 3 times (only one of the conditional statements gets executed).

      What you should do is assign the return value of getNumber() to a temporary variable, and use that variable instead of calling getNumber() again.

  • in your example above, you forgotten to insert "return 0"
    if i compile it says error

    #include <iostream>

    int main()
        // count holds the current number to print
        int count = 1; // start at 1

        // Loop continually until we pass number 100
        while (count <= 100)
            std::cout << count << " "; // print the current number

            // if count is evenly divisible by 20, print a new line
            if (count % 20 == 0)
                std::cout << "\n";

            count = count + 1; // go to next number
        } // end of while
    } // end of main()

  • Rammwurst

    Or you know

        return!(x % 2);

    cause you already taught us that everything !=0 bool sees as true.

    • J3ANP3T3R

      Interesting. but in his example

      return (x % 2) == 0;

      it will only either return a zero for FALSE and a non-zero value for TRUE. did you mean add ! in case the remainder is a negative ? i dont see what else could be missing return (x % 2) == 0; looks fine.

  • Travis

    Is there any reason someone shouldn’t do:

  • ihowa

    i wrote a code for the second question and it is way different from what you wrote but it works fine. i want to know your take on my code pls and thank you

    • Alex

      Did you test this program? If so, you’d know that it doesn’t work. It starts off good, getting a number from function enternum(), which is passed back to main. But that value (x) is never used. Instead, iseven() declares its own local uninitialized variable x and then uses that to try to determine even or not. That will lead to undefined results.

      You need to pass the variable x in main to function iseven() as a function parameter, and have iseven() use that variable. Then your program will not only be well structured, it will actually work too. 🙂

      • Ihowa

        I understand what you’re getting at. but the first program did work.

        • Olvin Lizama


          It doesn’t work, I tried to compile it and gave me warnings about x not being used, Alex is right in order to work you need to pass x to iseven() function, should be like this,

  • M Hassan Tahir

    #include "stdafx.h"
    #include <iostream>

    int userInput()
        std::cout << "Enter an integer and know whether it is even or odd: ";
        int integer;
        std::cin >> integer;
        return integer;

    void  isEven(int x)
        if ( x % 2 == 0)
            std::cout << "The entered integer is even";
            std::cout << "The entered integer is odd";

    int main()
        int input = userInput();

        return 0;

    Another simple way. I hope it will work fine everywhere.
    Getting a hang of programming in C++ now.
    Thanks Alex!

  • Olvin Lizama

    Hi Alex,

    Perhaps you wanted us to use the functions and everything you taught us, but in think this is the simple way to make this program,

  • Olvin Lizama

    Well, I think now your tutorials are mature enough to write a book, it may not be a best seller, but you can leave your legacy in C++ history, people will quote your work, your examples, and teach with your material.

    You have such a great didactic and is really easy to understand what you want to teach and very few people has that gift.

    For sure it could be a struggle to do it, but never will be worthless.

    I thank you for this project, is awesome and maybe you are used to people saying this, but I’m learning a lot thanks to  you.

    Sorry for my English it’s not my native language.

    Best wishes,

    • Alex

      Thank you for your kind words. The biggest problem with books is they are expensive, and that makes them inaccessible to a large portion of the world. The great thing about this website is that it is accessible for everyone with internet (since it’s ad-sponsored, something I can’t do with a book)! My goal isn’t to be famous or quoted -- my goal is to help others learn C++, just like others once helped me. This is my little mark on the world, and I’m proud that so many people from all countries of the world, rich or poor, have been able to visit.

  • Gabriel Netto Ferreira

    I did that code "on my way", but the compiler accuses an error in lines 8 and 9.
    What can it be? I never used string like data type, so… probably it’s a lil mistake

    ty, and sorry for my bad english. I’m not american, so english isn’t mine/my (idk, but I think it’s mine ahuauha) mother tongue :s

    • Gabriel Netto Ferreira

      Obs: I’m using Netbeans IDE, in Ubuntu 16.04

    • Alex

      I’m not sure which specific lines are causing errors, but just inspecting your program, a few things jump out at me:
      A few thoughts here:
      1) Your isEven() function is returning a string -- if it’s going to return a string, it should return a std::string.
      2) Your isEven() function should really be returning a boolean.
      3) Also make sure you’ve #included the string header.

  • Harbie

    I am trying to learn the c++ modulo. I was able to get the positive integers to run and compile… But whenever I try the negative divisor it doesn’t compile …..

    I just found your page and would post my program in a few….

    Thanks and looking to learn from here as others have…

  • harbie

  • antiriad7

    On exercises 2’s answer, why?:

    Why not simply?:

    ‘%’ has higher precedence than ‘==’, it will be better practice to use without parentheses.

    • Alex

      return x % 2 == 0 assumes both the code author the reader remembers that % has higher precedence than ==. Even though the parenthesis in this case are superfluous, they both make your intent clear and ensure you haven’t misremembered the prioritization. In general, you should be optimizing your code for readability, correctness, and maintainability -- consequently, I would say it’s a better practice to use the parenthesis in this case than not (there’s no runtime performance penalty for using them).

Leave a Comment
