我想问var ints = new int[] { 2, 4, 1, 10, 3, 7 };
var x = ints
.Where(c => c / 3 > 0) <-- (1)
.Select(s2 => s2 + ints
.Where(c => c / 3 == 0) <-- (2)
.Aggregate((f, s) => f - s))
.Sum();
操作有什么用?
我尝试查找文档,但是找不到相关信息。
答案 0 :(得分:1)
paper you're reading在下一句话中确切描述了其作用:
此指令创建一个16位 屏蔽16个有符号或无符号的最高有效位 寄存器中的8位整数,将[目标地址]的高位清零
这完全是{em> pmovmskb
在XMM寄存器上所做的事情,因此很明显,这就是他们在谈论的指令。他们有意或无意地从助记符中删除了p
(用于压缩整数)。
它们的工作方式图(不正确)用vpmovmskb reg, ymm1
标记。使用YMM源,vpmovmskb
生成32位掩码。
(尽管如果输入的YMM寄存器是通过VMM编码的指令(如vpxor xmm1, xmm2, xmm3
通过XMM低位写入的,那么高16个字节将全部为零,因此它们将得到它们描述的结果出于不同的原因。)
其用例包括诸如strlen
或memchr
之类的搜索循环(其中lzcnt
/ tzcnt
对于找到匹配或不匹配元素的元素非常有用) )。
或为pshufb
掩码的查找表创建索引,例如用于左包装,或者作为将IPv4点分四进制字符串解析为整数的一部分。 Fastest way to get IPv4 address from string