Skip to content

Subtract 1 without arithmetic operators

• Difficulty Level : Easy
• Last Updated : 24 Jun, 2022

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 ` `using` `namespace` `std;`   `int` `subtractOne(``int` `x) { ``return` `((x << 1) + (~x)); }`   `/* Driver program to test above functions*/` `int` `main()` `{` `    ``cout<< subtractOne(13);` `    ``return` `0;` `}`   `// This code is contributed by Aditya Kumar (adityakumar129)`

C

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

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`

My Personal Notes arrow_drop_up
Recommended Articles
Page :