skip to content
← Go back

Decoding Bitwise Operations

Understanding how bitwise operations affect

XOR

PUSH32 0xaaaa0000000000047b37ef4d76c2366f795fb557e3c15e0607b7d8cccccc000a

//     0xaaaa0000000000047b37ef4d76c2366f795fb557e3c15e0607b7d8 cccccc 0000
//     0x0000 aaaa0000000000047b37ef4d76c2366f795fb557e3c15e0607b7d8 cccccc
PUSH1 0x10
SHR

//     0x0000aaaa0000000000047b37ef4d76c2366f795fb557e3c15e0607b7d8 cccccc
//     0x0000000000000000000000000000000000000000000000000000000000 cccccc
PUSH3 0xffffff
AND

//     0x0000000000000000000000000000000000000000000000000000000000 cccccc
//     0x0000000000000000000000000000000000000000000000000000000000 666666
PUSH3 0xaaaaaa
XOR
//     0x0000000000000000000000000000000000000000000000000000000000 666666
//     0x000000000000000000000000000000000000000000000000000000666666 0000
PUSH1 0x10
SHL

//     0xaaaa0000000000047b37ef4d76c2366f795fb557e3c15e0607b7d8 cccccc 0000
//     0xaaaa0000000000047b37ef4d76c2366f795fb557e3c15e0607b7d8 aaaaaa 0000
PUSH32 0xaaaa0000000000047b37ef4d76c2366f795fb557e3c15e0607b7d8cccccc000a
XOR

or

https://www.evm.codes/playground?fork=merge&unit=Wei&codeType=Mnemonic&code=‘v32yaaaawww0047b37ef4d76c2366f795fb557e3c15e0607b7d8ccccccwauDUP1zRuv2ybbbb~XORzLuXOR~’~%5Cnzuv1yf0~SHy%200xw000vPUSHu~~%01uvwyz~\_

PUSH32 0xaaaa0000000000047b37ef4d76c2366f795fb557e3c15e0607b7d8cccccc000a

DUP1

PUSH1 0xf0
SHR

PUSH2 0xbbbb
XOR

PUSH1 0xf0
SHL

XOR

Single Bit For Booleans

Lets look at PAUSED in AAVE’s library.

// -> SET: `(self.data & mask) | (paused ? 1 : 0 << IS_PAUSED_START_BIT_POSITION(60))`


// 1111
PUSH32 0xAAAA00000000000000000000000000000000000000000000F000000000000000

// 1110
PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF


AND

// or PUSH32 0x000000000000000000000000000000000000000000000000E000000000000000 for false
// 1111 (true)
PUSH32 0x000000000000000000000000000000000000000000000000F000000000000000

OR

Share this Article

Recent Articles