Методы производят два разных представления цветов. Один представляет интенсивность каждого цвета как целое число от 0 до 255 (включительно). Другой представляет интенсивность каждого цвета в виде числа с плавающей запятой от 0 до 1 (включительно).
Пока x
является неотрицательным целым числом, x & 0xFF
эквивалентно x % 256
. Оператор %
возвращает остаток после деления; x % 256
- это остаток от деления x
на 256. &
выполняет побитовое И; x & 0xFF
производит младшие восемь битов x
. Поскольку все биты выше восьмого бита представляют степени двойки, равные 256 или более, использование только младших восьми бит эквивалентно удалению всех кратных 256, оставляя только остаток. Вот почему x & 0xFF
и x % 256
эквивалентны неотрицательному x
. (Для отрицательных x
они различаются из-за того, как отрицательные числа представлены битами, и из-за того, что %
дает отрицательный остаток.)
Поскольку они эквивалентны, компилятор должен оптимизировать их для одного и того же кода , если он знает, что левый операнд неотрицателен.
Таким образом, оба метода, показанные в вопросе, до этого момента идентичны. Последний просто делится на 255.0
, чтобы масштабировать результат от 0-255 до 0-1.