Is there a way to perform a circular bit shift in C#?

后端 未结 6 971
太阳男子
太阳男子 2020-11-29 04:58

I know that the following is true

int i = 17; //binary 10001
int j = i << 1; //decimal 34, binary 100010

But, if you shift too far, t

6条回答
  •  误落风尘
    2020-11-29 05:41

    If you know the size of type, you could do something like:

    uint i = 17;
    uint j = i << 1 | i >> 31;
    

    ... which would perform a circular shift of a 32 bit value.

    As a generalization to circular shift left n bits, on a b bit variable:

    /*some unsigned numeric type*/ input = 17;
    var result = input  << n | input  >> (b - n);
    


    @The comment, it appears that C# does treat the high bit of signed values differently. I found some info on this here. I also changed the example to use a uint.

提交回复
热议问题