Java程式在不使用算術運算子的情況下加兩個數


算術運算子(如 +、-、*、/)用於執行數學運算,例如加法、減法、乘法、模運算和除法。我們都使用 + 運算子對兩個數字進行加法運算,但在本文中,我們將瞭解一些可以在不使用算術運算子的情況下對兩個數字進行加法的 Java 程式。以下運算子最適合此目的:

  • 自增運算子 (++) - 它們用於將變數的值增加 1。它分為兩種型別:字首自增和字尾自增。字首自增運算子首先增加值,然後將其用於運算,而後綴自增運算子首先將其用於運算,然後增加其值。對於此程式,我們可以使用其中任何一個運算子。

  • 位運算子 - 這些運算子首先將運算元轉換為其二進位制形式,然後執行給定的運算。我們使用按位與(&)、異或(^) 和左移運算子(<<)。

方法 1:使用自增運算子

當我們將 ++ 運算子用作字首時,它就變成了字首自增運算子。當我們將其用作字尾時,它就變成了字尾自增運算子。

示例 1

我們將透過此示例瞭解字首自增和字尾自增運算子之間的區別。我們在第 5 行進行字尾自增,因此 'num' 的值增加到 10,但未分配給 'num2',我們得到 'num2' 的值為 9。我們可以在下一行看到 'num' 的增加值。在第 8 行,由於字首自增運算,'num' 的值將增加到 11。因此,我們在下一行得到 'num3' 的值為 11。

import java.util.*;
public class Main{
   public static void main(String[] args){
      int num = 9;
      int num2 = num++; // post increment
      System.out.println("Value of num2: " + num2);
      System.out.println("Value of num after post increment: " + num);
      int num3 = ++num; // pre increment
      System.out.println("Value of num3: " + num3);
   }
}

輸出

Value of num2: 9
Value of num after post increment: 10
Value of num3: 11

使用自增運算子加兩個數

示例

import java.util.*;
public class Main {
   public static int sum(int n1, int n2) {
      for(int i=1; i<=n2; i++) {
         n1++;
      }
      return n1;
   }
   public static void main(String[] args) {
      System.out.println("Sum = " + sum(23,5));
   }
}

輸出

Sum = 28

在上面的程式中,我們建立了一個使用者定義的方法 'sum' 以及兩個型別為整數的引數 'n1' 和 'n2'。在該方法中,我們將 'n1' 的值增加到 'n2' 以找到給定數字的總和。在主方法中,我們用兩個引數(n1 = 23,n2 = 5)呼叫了 'sum'。

方法 2:使用位運算子

按位與 檢查運算元的兩個位是否都為 1,如果是則返回 1,否則返回 0。

與運算的真值表

a

b

a&b

0

0

0

0

1

0

1

0

0

1

1

1

按位異或 如果兩個位相反則返回 1,否則返回 0。

異或運算的真值表 -

a

b

a^b

0

0

0

0

1

1

1

0

1

1

1

0

按位左移 運算子將運算元的位向左移動指定位置。

x<<n,x 將被轉換為二進位制形式,然後其位將根據 n 指定的位置數進行移動。

演算法

  • 步驟 1 - 我們建立了一個使用者定義的方法 'sum' 以及兩個型別為整數的引數 'n1' 和 'n2'。此方法內的 while 迴圈將執行,直到 'n2' 不等於 0。

  • 步驟 2 - 我們在 9 和 6 之間執行 '&' 運算,並將結果以二進位制形式分配給進位變數 'c'。

  • 步驟 3 - 現在,我們執行 XOR 運算,以便 'n1' 的值將更新為 15(二進位制形式為 1111)。由於 'n2' 的值在左移運算後將變為 0,因此 while 迴圈將停止執行,並將列印 15 作為輸出。

示例

import java.util.*;
public class Main {
   public static int sum(int n1, int n2) {
      while(n2!=0){
         int c= n1 & n2; // n1 = 1001, n2 = 0110, c = 0000
         n1= n1^n2; // n1 = 1111 after XOR operation
         n2= c << 1; // n2 = 0000
      }
        return n1;
   }
   public static void main(String[] args) {
      System.out.println("Sum = " + sum(9, 6));
   }
}

輸出

Sum = 15

結論

在本文中,我們執行了在不使用算術運算子的情況下對兩個數字進行加法的操作。我們已經看到了兩種方法來做到這一點。第一種方法不適合新增兩個大數字。與第一種方法相比,第二種方法是更快、更有效的方法,因為位運算子以二進位制表示形式工作。

更新於: 2023年4月25日

3K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.