# API and ABI Versioning

`PY_VERSION_HEX` is the Python version number encoded in a single integer.

For example if the `PY_VERSION_HEX` is set to `0x030401a2`, the underlying version information can be found by treating it as a 32 bit number in the following manner:

> Bytes | Bits (big endian order) | Meaning
> --- | --- | ---
> `1` | `1-8` | `PY_MAJOR_VERSION` (the `3` in `3.4.1a2`)
> `2` | `9-16` | `PY_MINOR_VERSION` (the `4` in `3.4.1a2`)
> `3` | `17-24` | `PY_MICRO_VERSION` (the `1` in `3.4.1a2`)
> `4` | `25-28` | `PY_RELEASE_LEVEL` (`0xA` for alpha, `0xB` for beta, `0xC` for release candidate and `0xF` for final), in this case it is alpha.
> | `29-32` | `PY_RELEASE_SERIAL` (the `2` in `3.4.1a2`, zero for final releases)

Thus `3.4.1a2` is hexversion `0x030401a2`.

All the given macros are defined in Include/patchlevel.h.