我正在寻找一种计算unsigned int中位转换次数的方法。
如果int包含:0000000000000000000001010
过渡次数为:4
如果int包含:00000000000000000000001001
过渡次数为:3
答案 0 :(得分:3)
解决此问题的直接方法是计算位置i
处的位与位置i+1
处的位不同的位置数。这可以通过使用符号扩展名单右移后对数字进行异或来完成:
Integer.bitCount(n ^ (n >> 1))
XOR运算符^
将把1放在连续位置的位彼此不同的所有位置。 Integer.bitCount
将通过计算一个数来完成任务。
符号扩展将确保在n
为负数的情况下,没有从最高有效位到零的“幻像”转换。