How To – The Java XOR Operator

How To – The Java XOR Operator

1 Comment

Last Updated on October 25, 2024 by jt

In this short tutorial we will look at using the Java XOR operator. We will discuss how the operator works, and how you can use it in your Java applications.

The XOR Operator

The XOR operator, also known as an exclusive OR operator is one of Java’s bitwise operators. The XOR operator is represented by the ^ (carrot) symbol.

The XOR Operator works with boolean and integer (int, long, byte) types only.

Logical XOR

When used with boolean values, the XOR functions as a logical operator.

Logical XOR Truth Table

When dealing with boolean values, the XOR operator will only return true if the operands are different.

ABA ^ B
truetruefalse
truefalsetrue
falsetruetrue
falsefalsefalse

Logical XOR Example

The following Java statements:

boolean isSunny = true;
boolean isWarm = true;

System.out.println("Is it sunny and warm? " + (isSunny ^ isWarm));

Will produce the following output:

Is it sunny and warm? false

If we change the isSunny variable to false:

boolean isSunny = true;
boolean isWarm = false;

System.out.println("Is it sunny and warm? " + (isSunny ^ isWarm));

Will change the output to:

Is it sunny and warm? true

Bitwise XOR

When the XOR operator is used with integer values, it will perform a bitwise comparison.

Just as a refresher, a byte is composed of 8 bits. As a bitwise operator, the result is calculated from comparing each bit in the byte or bytes.

Bitwise XOR Truth Table

When comparing bytes, the Bitwise XOR operator applies the following logic.

ABA ^ B
000
011
101
110

Bitwise XOR Examples

The following example in Java:

int f = 1; //  00000001
int g = 10; // 00001010

System.out.println("Result: " + (f ^ g)); // 00001011

Will produce:

Result: 11

To illustrate how the result was calculated, consider the following table.

12345678
100000011
1000001010
1 ^ 1000001010
XOR Bitwise result

The XOR bitwise operation on each bit of the two values results in the binary value of 00001010, which is the binary value of the decimal 11.

At first glance you maybe thinking the XOR operator is doing a mathematical operation since 1 + 10 = 11.

If you run this code, it could seem that way.

int i = 0;
int j = 0;

for (int k = 0; k < 15; k++) {
  System.out.printf("values: %d ^ %d = %d  | %d + %d = %d  \n", i, j, i ^ j, i, j, i + j);

  j++;
}

The results seem that XOR is doing a math operation:

values: 0 ^ 0 = 0  | 0 + 0 = 0  
values: 0 ^ 1 = 1  | 0 + 1 = 1  
values: 0 ^ 2 = 2  | 0 + 2 = 2  
values: 0 ^ 3 = 3  | 0 + 3 = 3  
values: 0 ^ 4 = 4  | 0 + 4 = 4  
values: 0 ^ 5 = 5  | 0 + 5 = 5  
values: 0 ^ 6 = 6  | 0 + 6 = 6  
values: 0 ^ 7 = 7  | 0 + 7 = 7  
values: 0 ^ 8 = 8  | 0 + 8 = 8  
values: 0 ^ 9 = 9  | 0 + 9 = 9  
values: 0 ^ 10 = 10  | 0 + 10 = 10  

However, if we just change the starting value, we can see we get a much different result from the XOR operation.

int i = 5;
int j = 5;

for (int k = 0; k < 15; k++) {
    System.out.printf("values: %d ^ %d = %d  | %d + %d = %d  \n", i, j, i ^ j, i, j, i + j);

    j++;
}

values: 5 ^ 5 = 0  | 5 + 5 = 10  
values: 5 ^ 6 = 3  | 5 + 6 = 11  
values: 5 ^ 7 = 2  | 5 + 7 = 12  
values: 5 ^ 8 = 13  | 5 + 8 = 13  
values: 5 ^ 9 = 12  | 5 + 9 = 14  
values: 5 ^ 10 = 15  | 5 + 10 = 15  
values: 5 ^ 11 = 14  | 5 + 11 = 16  
values: 5 ^ 12 = 9  | 5 + 12 = 17  
values: 5 ^ 13 = 8  | 5 + 13 = 18  
values: 5 ^ 14 = 11  | 5 + 14 = 19  
values: 5 ^ 15 = 10  | 5 + 15 = 20 

Conclusion

In this post we demonstrated the dual nature of the Java XOR operator. When applied to boolean values, the XOR operator functions as a logical comparison. When applied to integers, we explored how the XOR operator is doing a bitwise operation.

As always, you can find the source code for this post in my Github repository here.

Spring Framework 6: Beginner to Guru

Checkout my best selling course on Spring Framework 6. This is the most comprehensive course you will find on Udemy. All things Spring!

About jt

    You May Also Like

    One comment

    1. October 25, 2024 at 2:49 am

      pls change binary value of 1 . int f = 1; // 00000011 to int f = 1; // 00000001 in table also..

      Reply

    Leave a Reply

    Your email address will not be published. Required fields are marked *

    This site uses Akismet to reduce spam. Learn how your comment data is processed.