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