首页 / 知识
关于C#:如何将字节数组移位12位
2023-04-13 07:41:00

How to shift an array of bytes by 12-bits我想将字节数组的内容向左移动12位。 例如,从此类型为
我想将它向左移动12位,结果是:
为指针欢呼! 此代码的工作原理是为每个字节预备12位,然后向前复制适当的位。 12位是下一个字节的下半部分(半字节)和相距2个字节的上半部分。
好吧,我想说一个普通的移位操作就是这样做的(称为溢出),只是让多余的位从右边或左边掉下来。如果您愿意的话,它携带起来非常简单-只需保存12位,然后再开始移位即可。也许您想循环移位,以将溢出的位放回底部?也许您想重新分配数组并使它变大?将溢出返回给调用方?如果非零数据溢出,是否返回布尔值?您必须定义"进位"对您意味着什么。
这是我的解决方案,但更重要的是我解决问题的方法。 我通过 解决了这个问题
这向我显示了模式:
此模式适用于所有字节。 翻译成C,表示:
我们现在再进行三个观察:
所以,我们
给定长度为
就可以了...数组向左移 通过转换为指针,可以在某些机器上使循环更有效
并使用CPU支持的最大整数数据类型。 (我刚刚输入了这个内容,所以现在对于某些人来说是复习代码的好时机,特别是因为众所周知,位纠错很容易弄错。) 让它成为移位8位整数数组中的
我想从这里开始,您将必须找到最优化的方法来利用此数据在数组中的整数之间移动。通用算法是通过从数组的右侧开始并移动每个整数 如果将
请记住,这4位只是一个简单的掩码:0x0F或仅为0b00001111。这很容易计算,动态构建,或者甚至可以使用简单的静态查找表。 我希望这足够通用。我对C / C一点都不满意,所以也许有人可以清理我的语法或更具体些。 奖金:如果您对C语言很精打细算,则可以将多个数组索引转换为单个16位,32位甚至64位整数并执行移位。但这大概不是很方便,我建议反对这一点。只是一个可能的优化。 这是一个使用临时变量的可行解决方案:
调用此函数3次以进行12位移位。 由于使用了临时变量,迈克的解决方案可能更快。 32位版本... :-)处理1 <=计数<= num_words
有一些边缘情况使这成为一个整洁的问题:
这是一个简单的解决方案,它遍历数组,将下一个字节的低位半字节复制到其高位半字节,然后将下一个下一个(2)字节的高位半字节复制到其低位-点菜。为了节省两次对预读指针的取消引用,它维护了一个带有" last "和" next "字节的两个元素的缓冲区:
考虑边界条件,边界条件会依次激活函数的更多部分:
如果效率是您的目标,答案可能很大程度上取决于您计算机的体系结构。通常,您应该维护两个元素的缓冲区,但是一次处理一个机器字(32/64位无符号整数)。如果您要转移大量数据,则值得将前几个字节作为特殊情况处理,这样您就可以使机器字指针与字对齐。如果访问属于机器字边界,则大多数CPU可以更有效地访问内存。当然,尾随字节也必须进行特殊处理,以免在数组末尾触及内存。 @Joseph,请注意,变量为8位宽,而移位为12位宽。您的解决方案仅适用于N <=可变大小。 如果可以假设您的数组是4的倍数,则可以将该数组转换为uint64_t数组,然后对其进行处理。如果不是4的倍数,则可以尽可能多地使用64位块,然后一个接一个地处理其余部分。 |
最新内容
相关内容
python如何创建空数组?
python如何创建空数组?,数据,培训,数组,形状,列表,对象,参数,方式,嵌套,初始化,python创建空数组的三种方式:1、numpy指定形状为0实际上,emptypython怎样获取json数据类型?
python怎样获取json数据类型?,培训,数据类型,类型,正则,火狐,以上,方法,更多,内容,列表,python中获取json不同数据类型的方法:1、获取"key":vpython怎么在数组添加一行?
python怎么在数组添加一行?,培训,下标,维度,数组,列表,函数,形状,元素,代表,原型,python中在数组添加一行的方法:python中可以使用stack()函数python如何获取列表里的数据类型?
python如何获取列表里的数据类型?,代码,信息,培训,类型,数据类型,表里,元素,语句,函数,对象,1、Python可以通过tpye()方法来判断list里的元知实数是不是python的数据类型?
实数是不是python的数据类型?,数字,标准,培训,实数,数据类型,数轴,复数,有限小数,无理数,虚数,实数是python的数据类型。实数,是有理数和无理python如何判断多维数组多少列
python如何判断多维数组多少列,第一,培训,数组,函数,表示,矩阵,以上,功能,方法,更多,python获取数组行数和列数的方法:importnumpyasnpx=np.arpython如何去除数组中的指定元素
python如何去除数组中的指定元素,培训,元素,函数,除数,序列,参数,示例,语法,以上,条件,python中可以使用filter()函数来删除数组中指定元素。python中如何清空数组(列表)元素
python中如何清空数组(列表)元素,代码,培训,数组,列表,元素,示例,范围,类型,方法,初始化,python本身并没有数组类型,但是他的Numpy库中有数组python字典类型的数据怎么保存
python字典类型的数据怎么保存,数据,培训,字典,中间,类型,文件,相似性,变量,算法,效率,在使用python编程过程中,我们往往需要借助字典来提高编python如何将结果保存
python如何将结果保存,数据,郑州,培训,文件,字符串,函数,你好,模式,结果,内容,一、建立文件,保存数据1.使用python中内置的open函数,打开txt文python中如何定义int类型
python中如何定义int类型,标准,数字,数据,培训,基础,整数,数据类型,赋值,布尔,类型,标准数据类型python3中有六个标准的数据类型:Number(数字)python中怎么打印数组
python中怎么打印数组,代码,培训,数组,语句,数据类型,下面,形式,以上,参数,以下,列表是Python中最常用的数据类型之一。我们知道,Python打印列