diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp
index d2ed3ee73f37515cc21fae046765761266e05eda..83386e8079c5fca868024acb4be07b4e74a58cc1 100644
--- a/src/libs/cplusplus/pp-engine.cpp
+++ b/src/libs/cplusplus/pp-engine.cpp
@@ -164,7 +164,15 @@ protected:
     bool process_primary()
     {
         if ((*_lex)->is(T_INT_LITERAL)) {
-            _value.set_long(tokenSpell().toLong());
+            int base = 10;
+            const QByteArray spell = tokenSpell();
+            if (spell.at(0) == '0') {
+                if (spell.size() > 1 && (spell.at(1) == 'x' || spell.at(1) == 'X'))
+                    base = 16;
+                else
+                    base = 8;
+            }
+            _value.set_long(tokenSpell().toLong(0, base));
             ++(*_lex);
             return true;
         } else if (isTokenDefined()) {
@@ -367,7 +375,7 @@ protected:
     {
         process_xor();
 
-        while ((*_lex)->is(T_CARET)) {
+        while ((*_lex)->is(T_PIPE)) {
             const Token op = *(*_lex);
             ++(*_lex);