Please explain how `address(uint160(bytes20(b)))` works differently than `address(uint160(uint256(b)))` when converting a type that uses a larger byte size then `address`, for example `bytes32`, then the `address` is truncated.

[Link](https://solidity.readthedocs.io/en/develop/types.html#address): <https://solidity.readthedocs.io/en/develop/types.html#address>