# Subtract 1 without arithmetic operators

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 ` ` `  `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

 ` `

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

 ` `

Output:

```12
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.