/// <summary> /// 返回指定整数二进制表示的下一字典序排列。 /// </summary> /// <param name="value">要获取下一字典序排列的整数。</param> /// <returns>指定整数二进制表示的下一字典序排列。</returns> /// <remarks> /// <para>方法的返回值与 <paramref name="value"/> 的二进制表示包含相同个数的 <c>1</c>, /// 而且是字典序的下一排列。</para> /// <para>例如,<c>102</c> 的二进制表示为 <c>1100110</c>,它的下一字典序排列为 /// <c>1101001</c>,同样包含 <c>4</c> 个 <c>1</c>,而相应的值为 <c>105</c>。 /// <c>105</c> 的下一字典序排列为 <c>106</c>(二进制为 <c>1101010</c>), /// 接下来是 <c>108</c>(二进制为 <c>1101100</c>)和 <c>113</c>(二进制为 <c>1110001</c>)。 /// </para></remarks> //[CLSCompliant(false)] public static ulong NextBitPermutation(this ulong value) { ulong t = value | (value - 1); return((t + 1UL) | (((~t & (ulong)(-(long)~t)) - 1UL) >> (value.CountTrailingZeroBits() + 1))); }