﻿ COMPUTE: Bit Operations (ABAP - SAP's 4GL Programming Language)

## COMPUTE: Bit Operations

### COMPUTE

Effect

The bit expressiong bitexp is calculated and the result placed in field x.
You can use the four bit operators BIT-NOT, BIT-AND, BIT-XOR and BIT-OR. The operands are linked according to the table below.
The priority is normal: BIT-NOT has priority over BIT-AND, followed by BIT-XOR, and then BIT-OR. You can use any number of parentheses.
All operands in bitexp , and the result field x, must have type X.
The ABAP keyword COMPUTE is optional.

Relationship table

```x y | BIT-NOT x   x BIT-AND y   x BIT-XOR y   x BIT-OR y
--------------------------------------------------------
0 0 |	1			 0			 0			 0
0 1 |	1			 0			 1			 1
1 0 |	0			 0			 1			 1
1 1 |	0			 1			 0			 1
```

Note

If the field lengths of the operands are different, they are all changed to the length of the result field x using MOVE-X-TO -X. This means that shorter operands are filled with HEX 0 characters, and longer ones are truncated.

```DATA: X1(1) TYPE X VALUE '30', 		"  0011 0000  BIT-XOR
X2(1) TYPE X VALUE '50'.			"  0101 0000  =
X1 = X1 BIT-XOR X2.					 "  0110 0000
WRITE X1.
```

Output: 60

```DATA: X1(4) TYPE X,
X2(1) TYPE X VALUE '15',
X3(2) TYPE X VALUE 'F3C0',
X4(3) TYPE X VALUE '806021'.
X1 = X2 BIT-AND BIT-NOT ( X3 BIT-OR X4 ).
"'F3C0' BIT-OR  '806021'   = 'F3E02100'
"	 BIT-NOT 'F3E02100' = '0C1FDEFF'
"'15'   BIT-AND '0C1FDEFF' = '04000000'
WRITE X1.
```

Output: 04000000

You can implement sets very efficiently using bit sequences. If the basic set contains n elements, you can use X field with length ceil(n/8) (for information about "ceil", see COMPUTE )). If the i-th element of the basic set is contained in a set, the i-th bit in the associated X field is set to 1. Otherwise, it is set to 0. ( SET BIT). Using GET BIT , you can check whether an element belongs to a set.
You can implement the usual set operations as follows:

 Bit operation, set operation BIT-AND Intersection BIT-OR Union BIT-XOR Symmetrical difference

The system load caused by evaluating bit expressions depends on the length of the operands.

• BITS_WRONG_TYPE: An operand or the result field does not have type X.

Related