Related Articles

# Subtract 1 without arithmetic operators

• Difficulty Level : Easy
• Last Updated : 26 May, 2021

Write a program to subtract one from a given number. The use of operators like ‘+’, ‘-‘, ‘*’, ‘/’, ‘++’, ‘–‘ …etc are not allowed.

Examples:

```Input:  12
Output: 11

Input:  6
Output: 5```

Method 1
To subtract 1 from a number x (say 0011001000), flip all the bits after the rightmost 1 bit (we get 0011001111). Finally, flip the rightmost 1 bit also (we get 0011000111) to get the answer.

## C++

 `// C++ code to subtract``// one from a given number``#include ``using` `namespace` `std;` `int` `subtractOne(``int` `x)``{``    ``int` `m = 1;` `    ``// Flip all the set bits``    ``// until we find a 1``    ``while` `(!(x & m))``    ``{``        ``x = x ^ m;``        ``m <<= 1;``    ``}` `    ``// Flip the rightmost 1 bit``    ``x = x ^ m;``    ``return` `x;``}` `// Driver code``int` `main()``{``    ``cout << subtractOne(13) << endl;``    ``return` `0;``}` `// This code is contributed by noob2000`

## C

 `// C code to subtract``// one from a given number``#include ` `int` `subtractOne(``int` `x)``{``    ``int` `m = 1;` `    ``// Flip all the set bits``    ``// until we find a 1``    ``while` `(!(x & m)) {``        ``x = x ^ m;``        ``m <<= 1;``    ``}` `    ``// flip the rightmost 1 bit``    ``x = x ^ m;``    ``return` `x;``}` `/* Driver program to test above functions*/``int` `main()``{``    ``printf``(``"%d"``, subtractOne(13));``    ``return` `0;``}`

## Java

 `// Java code to subtract``// one from a given number``import` `java.io.*;` `class` `GFG``{``static` `int` `subtractOne(``int` `x)``{``    ``int` `m = ``1``;` `    ``// Flip all the set bits``    ``// until we find a 1``    ``while` `(!((x & m) > ``0``))``    ``{``        ``x = x ^ m;``        ``m <<= ``1``;``    ``}` `    ``// flip the rightmost``    ``// 1 bit``    ``x = x ^ m;``    ``return` `x;``}` `// Driver Code``public` `static` `void` `main (String[] args)``{``    ``System.out.println(subtractOne(``13``));``}``}` `// This code is contributed``// by anuj_67.`

## Python3

 `# Python 3 code to subtract one from``# a given number``def` `subtractOne(x):``    ``m ``=` `1` `    ``# Flip all the set bits``    ``# until we find a 1``    ``while` `((x & m) ``=``=` `False``):``        ``x ``=` `x ^ m``        ``m ``=` `m << ``1``    ` `    ``# flip the rightmost 1 bit``    ``x ``=` `x ^ m``    ``return` `x` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ``print``(subtractOne(``13``))``    ` `# This code is contributed by``# Surendra_Gangwar`

## C#

 `// C# code to subtract``// one from a given number``using` `System;` `class` `GFG``{``static` `int` `subtractOne(``int` `x)``{``    ``int` `m = 1;` `    ``// Flip all the set bits``    ``// until we find a 1``    ``while` `(!((x & m) > 0))``    ``{``        ``x = x ^ m;``        ``m <<= 1;``    ``}` `    ``// flip the rightmost``    ``// 1 bit``    ``x = x ^ m;``    ``return` `x;``}` `// Driver Code``public` `static` `void` `Main ()``{``    ``Console.WriteLine(subtractOne(13));``}``}` `// This code is contributed``// by anuj_67.`

## PHP

 ``

## Javascript

 ``
Output:
`12`

Method 2 (If + is allowed)
We know that the negative number is represented in 2’s complement form on most of the architectures. We have the following lemma hold for 2’s complement representation of signed numbers.
Say, x is numerical value of a number, then
~x = -(x+1) [ ~ is for bitwise complement ]
Adding 2x on both the sides,
2x + ~x = x – 1
To obtain 2x, left shift x once.

## C++

 `#include ` `int` `subtractOne(``int` `x)``{``    ``return` `((x << 1) + (~x));``}` `/* Driver program to test above functions*/``int` `main()``{``    ``printf``(``"%d"``, subtractOne(13));``    ``return` `0;``}`

## Java

 `class` `GFG``{` `    ``static` `int` `subtractOne(``int` `x)``    ``{``        ``return` `((x << ``1``) + (~x));``    ``}` `    ``/* Driver code*/``    ``public` `static` `void` `main(String[] args)``    ``{``        ``System.out.printf(``"%d"``, subtractOne(``13``));``    ``}``}` `// This code has been contributed by 29AjayKumar`

## Python3

 `def` `subtractOne(x):` `    ``return` `((x << ``1``) ``+` `(~x));` `# Driver code``print``(subtractOne(``13``));` `# This code is contributed by mits`

## C#

 `using` `System;``    ` `class` `GFG``{` `    ``static` `int` `subtractOne(``int` `x)``    ``{``        ``return` `((x << 1) + (~x));``    ``}` `    ``/* Driver code*/``    ``public` `static` `void` `Main(String[] args)``    ``{``        ``Console.Write(``"{0}"``, subtractOne(13));``    ``}``}` `// This code contributed by Rajput-Ji`

## PHP

 ``

## Javascript

 ``
Output:
`12`

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up