在保留模式的同时移位位 - c#

如果以前曾问过/回答过我,我深表歉意,但是老实说,我什至不知道如何正确地将其表达为一个问题。我有以下位模式:

0110110110110110110110110110110110110110110110110110110110110110

我正在尝试进行转换以保留我的基本模式;我的第一个本能是使用右旋转((x >> count) | (x << (-count & 63))),但是我的位模式中的不对称导致:

0011011011011011011011011011011011011011011011011011011011011011 <-错误

问题在于,最高有效(最左边)位最终为0而不是所需的1:

1011011011011011011011011011011011011011011011011011011011011011 <---对

我要寻找的这个功能有一个俗称吗?如果没有,我该如何实施这个想法?

附加信息:

尽管问题是与语言无关的,但我目前正在尝试使用C#解决此问题。
我使用的位模式是完全可以预测的,并且始终具有相同的结构;模式以单个零开头,后跟n - 1个零(其中n是奇数),然后无限重复。
我想在没有条件操作的情况下完成此操作,因为它们首先会破坏使用按位操作的目的,但也许我别无选择...

参考方案

您得到的数字结构如下:

B16  B15  B14  B13  B12  B11  B10  B09  B08  B07  B06  B05  B04  B03  B02  B01  B00

  ?    0    1    1    0    1    1    0    1    1    0    1    1    0    1    1    0

移位后,?需要出现在MSB中(B15或B63或其他)。它从何而来?好吧,最右边的副本位于右边的n位置:

B13    0    1    1    0    1    1    0    1    1    0    1    1    0    1    1    0
 ^--------------/

如果您的单词的宽度为w,则为1 << (w-n)

                 *

因此,您可以执行以下操作:

var selector = 1 << (w-n);
var rotated = (val >> 1) | ((val & selector) << (n-1));

但是您可能需要多个班次。然后,我们需要构建一个更大的蒙版:

  ?    0    1    1    0    1    1    0    1    1    0    1    1    0    1    1    0
            *    *    *    *    *

在这里,我选择假装n = 6,它只需是基本n的倍数,并且大于shift。现在:

var selector = ((1UL << shift) - 1) << (w - n);
var rotated = (val >> shift) | ((val & selector) << (n - shift));

使用您的模式的工作演示:http://rextester.com/UWYSW47054

可以很容易地看到,根据需要,输出具有周期3:

  1:B6DB6DB6DB6DB6DB
  2:DB6DB6DB6DB6DB6D
  3:6DB6DB6DB6DB6DB6
  4:B6DB6DB6DB6DB6DB
  5:DB6DB6DB6DB6DB6D
  6:6DB6DB6DB6DB6DB6
  7:B6DB6DB6DB6DB6DB
  8:DB6DB6DB6DB6DB6D
  9:6DB6DB6DB6DB6DB6
 10:B6DB6DB6DB6DB6DB
 11:DB6DB6DB6DB6DB6D

将谓词<T>转换为Func <T,bool> - c#

我有一个包含成员Predicate的类,希望在Linq表达式中使用该类:using System.Linq; class MyClass { public bool DoAllHaveSomeProperty() { return m_instrumentList.All(m_filterExpression); } private IEnumerable&…

Java中的“ <<”运算符 - java

最喜欢的语句来自Java的Character类:(1 << Character.PARAGRAPH_SEPARATOR)) >> type PARAGRAPH_SEPARATOR是字节,type是整数。这句话中的操作员,他们做什么?如何以及在哪里可以使用这些运算符?这是oracles java.lang.Character文档。该类中…

通过Maven编译器插件不会发生有限的包含和排除 - java

我正在使用3.6.0版的maven编译器插件,在此我们只想在特定文件夹中编译一个文件,而在该位置编译所有其他文件。例如:在文件夹应用程序中有14个文件,从那我只希望编译1个文件,但它编译了所有文件,如果我要排除,则它也不起作用。 <sourceDirectory>${basedir}/../src/java</sourceDirectory…

当我所有的都是T时,如何返回Interface <T>的实例? - java

我有一个界面:public interface ILoginResult<T> { public T get(); } 我有一个LoginPage对象:public class LoginPage<T> { ... public ILoginResult<T> login(...) { ... } } 我也有一些登录页面对…

客户端反序列化为数组序列化字典<string,string>数据 - c#

我有一个字典,该字典使用C#中的JavaScriptSerializer进行了序列化。在客户端,我有:"{"dd049eda-e289-4ca2-8841-4908f94d5b65":"2","ab969ac2-320e-42e1-b759-038eb7f57178":"5�…