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

filter_none

edit
close

play_arrow

link
brightness_4
code

// C code to subtract
// one from a given number
#include <stdio.h>
  
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP code to subtract
// one from a given number
  
function subtractOne($x)
{
    $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
    echo subtractOne(13);
      
// This code is contributed
// by anuj_67.
?>

chevron_right


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

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
function subtractOne($x
{
    return (($x << 1) + (~$x));
}
  
/* Driver code*/
  
print(subtractOne(13));
  
// This code has been contributed by mits
?>

chevron_right


Output:

12


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.