help me understand this code

I am trying to follow this code to implement I2c keypad
http://playground.arduino.cc/Main/I2CPortExpanderAndKeypads

but iam not understanding the following part of the code , what are these mapping accomplishing ?

// Hex byte statement for each port of PCF8574
const int hex_data[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};

// Hex data for each row of keypad in PCF8574
const int pcf8574_row_data[4] = 
{
  hex_data[ROW1] | hex_data[ROW2] | hex_data[ROW3] |
  hex_data[COL0] | hex_data[COL1] | hex_data[COL2] | hex_data[COL3],
  hex_data[ROW0] | hex_data[ROW2] | hex_data[ROW3] |
  hex_data[COL0] | hex_data[COL1] | hex_data[COL2] | hex_data[COL3],
  hex_data[ROW0] | hex_data[ROW1] | hex_data[ROW3] |
  hex_data[COL0] | hex_data[COL1] | hex_data[COL2] | hex_data[COL3],
  hex_data[ROW0] | hex_data[ROW1] | hex_data[ROW2] |
  hex_data[COL0] | hex_data[COL1] | hex_data[COL2] | hex_data[COL3],
};

// Hex data for each col of keypad in PCF8574
int col[4] = {hex_data[COL0], hex_data[COL1], hex_data[COL2], hex_data[COL3]};

but iam not understanding the following part of the code

Why don't you print the values in hex_data, pcf8574_row_data, and col, to see? Look at the | operator.

i was trying to understand the code before i build the circuit .

aliyesami:
i was trying to understand the code before i build the circuit .

i think it's simply mapping the keypad for the Arduino code to access via the HEX values later.