如何使用java计算unsigned int中的位转换次数

时间:2016-09-27 16:49:34

标签: java

我正在寻找一种计算unsigned int中位转换次数的方法。

如果int包含:0000000000000000000001010

过渡次数为:4

如果int包含:00000000000000000000001001

过渡次数为:3

1 个答案:

答案 0 :(得分:3)

解决此问题的直接方法是计算位置i处的位与位置i+1处的位不同的位置数。这可以通过使用符号扩展名单右移后对数字进行异或来完成:

Integer.bitCount(n ^ (n >> 1))

XOR运算符^将把1放在连续位置的位彼此不同的所有位置。 Integer.bitCount将通过计算一个数来完成任务。

符号扩展将确保在n为负数的情况下,没有从最高有效位到零的“幻像”转换。

Demo.