https://mp.weixin.qq.com/s/MQzX1Ned35ztz0vusPdkdQ
比特相关的操作。
参考链接:
1. Fill
把一个UInt重复n次;
a. 用法
b. 实现
根据重复的次数n,分为5中情况。
这里看最后一种情况:
2. Reverse
反转比特序。
a. 用法
b. 实现
根据位宽(length)分为4中情况,这里讲两种情况。
1) 位宽为8,16, 32, 64: isPow2(length) && length >= 8 && length <= 64
这里使用分治策略,1分为2交换位置,然后2分为4再次交换位置,知道切分之后比特位数为1,不再可分。
2) 位宽大于1的其他情况
使用分治策略:
3. PopCount
统计比特中1的个数。
a. 用法
b. 实现
1) 输入为Bits
把每一个比特转换为Bool,然后委托给另一个方法;
2) 输入为一组Bool
使用分治策略,逐个统计。
4. FillInterleaved
把每一个比特复制n次。
a. 用法
b. 实现
使用Fill把每一个Bool重复n次。然后串联在一起。
因为Cat是高位在前,而in.map是从低位开始,所以需要使用reverse逆序一下。
5. 附录