如何在for循环中编写附加代码块

时间:2016-12-12 10:45:02

标签: java logical-operators

如何在简单的for循环中编写以下代码:

int asInt = (valueAsBytes[3] & 0xFF)
                | ((valueAsBytes[2] & 0xFF) << 8)
                | ((valueAsBytes[1] & 0xFF) << 16)
                | ((valueAsBytes[0] & 0xFF) << 24);

2 个答案:

答案 0 :(得分:5)

请注意,每次访问valueAsBytes时数组索引减1,而shift运算符的第二个操作数增加8:

int asInt = 0;
for (int i = valueAsBytes.length-1; i >= 0; i--)
    asInt |= valueAsBytes[i] & 0xFF << (valueAsBytes.length-i)*8;

答案 1 :(得分:2)

我可以建议一个不同的解决方案吗?

我认为循环不会为此代码添加任何“清晰度”。真正的问题是你要复制像(valueAsBytes [i]&amp; 0xFF)四次的代码。 如果有的话,你可以这样做:

int asInt = maskIndexedValueAndShiftBy(3, 0) | maskIndexedValueAndShiftBy(2, 8) | ...

private final int maskIndexedValueAndShiftBy(int index, int shifter) {
   return (valueAsBytes[index] & 0xFF) << shifter;

循环只会使整个计算更难理解。