如何在uint256中以固定方式交换指定位置的位

时间:2018-02-13 15:59:30

标签: solidity

我正在尝试按位置交换uint256中的位。例如,我想将位置0-4的位与位置5-9的位交换。怎么可以实现这一点?

我知道按位操作应该完成,但我不确定是哪一个。

1 个答案:

答案 0 :(得分:1)

您可以按照以下方式实施:

function swapBits(uint256 _source) pure public returns (uint256) {
    // Get first 5 bits and shift them left by 5 bits
    uint16 bits1 = uint16(_source & 0x1F) << 5;

    // Get second 5 bits
    uint16 bits2 = uint16(_source >> 5) & 0x1F;

    return _source & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 | bits1 | bits2;
}