# Bit Masks

From PREX Wiki

Documentation |

HOW TOs for shift crew |

TaskList for 2019 |

Installation Photo Album |

Run Plan |

All Expert Contacts |

## Contents

## Bit-wise operations

- A 16 bit hexadecimal integer looks like
- n = (digits) 0x4th 3rd 2nd 1st = n_16 n_15 n_14 n_13 | n_12 n_11 n_10 n_9 | n_8 n_7 n_6 n_5 | n_4 n_3 n_2 n_1

- And the number 0x0177 is arrived at by
- n = 0x0177 = 0000|0001|0111|0111

### Hexadecimal numbering system

Hex Digit | Decimal | binary hex components | binary | binary hex components powers | Decimal |
---|---|---|---|---|---|

0 | 0 | 0000 | 0 | 0^3 + 0^2 + 0^1 + 0^0 | 0 |

1 | 1 | 0001 | 1 | 0^3 + 0^2 + 0^1 + 2^0 | 1 |

2 | 2 | 0010 | 10 | 0^3 + 0^2 + 2^1 + 0^0 | 2 |

3 | 3 | 0011 | 11 | 0^3 + 0^2 + 2^1 + 2^0 | 3 |

4 | 4 | 0100 | 100 | 0^3 + 2^2 + 0^1 + 0^0 | 4 |

5 | 5 | 0101 | 101 | 0^3 + 2^2 + 0^1 + 2^0 | 5 |

6 | 6 | 0110 | 110 | 0^3 + 2^2 + 2^1 + 0^0 | 6 |

7 | 7 | 0111 | 111 | 0^3 + 2^2 + 2^1 + 2^0 | 7 |

8 | 8 | 1000 | 1000 | 2^3 + 0^2 + 0^1 + 0^0 | 8 |

9 | 9 | 1001 | 1001 | 2^3 + 0^2 + 0^1 + 2^0 | 9 |

a | 10 | 1010 | 1010 | 2^3 + 0^2 + 2^1 + 0^0 | 10 |

b | 11 | 1011 | 1011 | 2^3 + 0^2 + 2^1 + 2^0 | 11 |

c | 12 | 1100 | 1100 | 2^3 + 2^2 + 0^1 + 0^0 | 12 |

d | 13 | 1101 | 1101 | 2^3 + 2^2 + 0^1 + 2^0 | 13 |

e | 14 | 1110 | 1110 | 2^3 + 2^2 + 2^1 + 0^0 | 14 |

f | 15 | 1111 | 1111 | 2^3 + 2^2 + 2^1 + 2^0 | 15 |

### Bitwise Operators

- Logical And (&) -> a = b & c
- Takes the bitwise (0's and 1's) representation of b and c and the result of each bit's & is "a"

- Logical Inclusive Or (|) -> a = b | c
- Takes the bitwise representation, and if either is 1 then a's corresponding bit is 1

- Logical Exclusive Or (^) -> a = b^c
- Takes the bitwise representation, and if just one of b or c's bits is 1 then a's corresponding bit is too, but if both are == then the result is 0

- Logical Not (~) -> a = ~b
- Takes each bit and returns its complement

- Bit shift (>> or <<) -> a = b>>N
- Takes the bit contents of b and shifts them N places to the right to produce a

- Examples
- Grab the 3rd digit of a hexadecimal integer and make that a new variable -> mask the other digits and shift the result to the right by 2
- a = (b & 0x0f00)>>2

- Mask off the top 8 bits (8th and 7th digit) of a 32 bit integer
- a = b & 0x00ffffff

- Mask off all but the last bit
- a = b & 0x1

- Mask off just the last bit
- a = b & ~0x1

- Grab the 3rd digit of a hexadecimal integer and make that a new variable -> mask the other digits and shift the result to the right by 2

### Japan Error Code Bit Masks

- Header File in JAPAN that defines the Event Cuts and Error Code Bits
- Note on using the stability cut in JAPAN parameter maps
- Weibin's note on using the beam stability cut in JAPAN
- The event cuts are defined in _eventcuts.***.map files