# 算法设计：如何实现不带算术运算符的减法1

2021年3月13日16:59:36 发表评论 352 次浏览

## 本文概述

``````Input:  12
Output: 11

Input:  6
Output: 5``````

1

111)。最后, 也将最右边的1位翻转(我们得到0011000111)以获得答案。

## C

``````// 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;
}``````

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

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

``12``

〜x =-(x + 1)[〜用于按位补码]

2x +〜x = x – 1

## C ++

``````#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;
}``````

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

``````<?php
function subtractOne( \$x )
{
return (( \$x << 1) + (~ \$x ));
}

/* Driver code*/

print (subtractOne(13));

// This code has been contributed by mits
?>``````

``12``