Learn YUL II

Solidity Programming Language
3 min readApr 10, 2023

In Solidity, the shl and shr commands have the same meaning as in the Yul language. These operators are used to shift the bits of a binary number to the left or right, respectively. Such operations can be useful when working with binary data or performing certain calculations. We also talk about “and”, “or” and “xor” operators.

SHL

In Solidity, the shl operator is used to shift the bits of a binary number to the left. This operation is equivalent to multiplying the original number by 2 to the power of the shift amount.

For example, 7 << 2 is equivalent to 7 * 4

For example, 7 << 3 is equivalent to 7 * 8

SHR

In Solidity, the shr operator is used to shift the bits of a binary number to the right. This operation is equivalent to dividing the original number by 2 to the power of the shift amount.

For example, 36 >> 2 is equivalent to 36 / 4.

For example, 16 >> 3 is equivalent to 16 / 8.

AND

In Solidity, the “&” operator is used to perform a bitwise “and” operation on two binary numbers. The result of this operation is a binary number in which each bit is 1 if the corresponding bit in both input numbers is 1, and 0 otherwise. This operator is useful when working with binary data, as it allows combining bits from different numbers to create a new binary number. In Yul, the “&” operator works in the same way.

bytes1 x = 0xb5; // [10110101]
bytes1 y = 0x56; // [01010110]

OR

In Solidity and Yul, the “|” operator is used to perform a bitwise “or” operation on two binary numbers. The result of this operation is a binary number in which each bit is 1 if the corresponding bit in either input number is 1, and 0 otherwise. This operator is useful when working with binary data, as it allows combining bits from different numbers to create a new binary number.

At least one of the bits have to be 1 (true).

x = 0xb5; // [10110101]
y = 0x56; // [01010110]

XOR

One of the inputs have to be 1 and the other one must be 0 to result in true.

x = 0xb5; // [10110101]
y = 0x56; // [01010110]

Associate Professor Engin YILMAZ (VeriDelisi)

--

--

Solidity Programming Language

Solidity basics for beginners: Learn the fundamentals of smart contract development and build your first DApp! #Solidity #Foundry #Ethereum #Opcodes #DApps