Шестнадцатеричные манипуляции с бедами.Не удается достичь ожидаемого значения - PullRequest
0 голосов
/ 08 октября 2011

Я должен объединить значения исходного и фонового массивов, чтобы получить ожидаемое значение (массив ответов).

    int[][] source =     { { 0, 0x44, 0x300, 0x660000 } };
    int[][] background = { { 2, 4,    0x600, 2 } };
    int[][] expected =   { { 1, 0x24, 0x400 , 0x330001 } };

Я заметил, что проблема заключается в том, чтобы просто запросить среднее из двух наборовчисел для всех случаев, кроме третьего (то есть я прошел все тесты, кроме одного 0x300 / 0x600).Третий случай, как мне кажется, странный.Я представлял два шестнадцатеричных числа в двоичном виде следующим образом:

    0011 0000 0000 (+)
    0110 0000 0000 I get:
    1001 0000 0000.

Ожидается 0x400, 1024 в базе 10, 100 0000 0000 в базе 2. Я не понимаю, как мне добраться до этого решения.

1 Ответ

2 голосов
/ 08 октября 2011

Термин background заставляет меня задуматься, он связан с манипулированием изображениями / пикселями. В этом контексте каждый пиксель содержит три компонента: красный, зеленый и синий. Если каждый компонент имеет ширину в один байт (значения от 0 до 255), то 32-разрядное целое число может содержать все три компонента. И «принять среднее» должно быть сделано для каждого компонента отдельно , так как вы не хотите, чтобы «зеленый» канал влиял на «синий» канал.

Давайте предположим, что представление 0x00rrggbb.

src: 0x00660000 -> 0x00, 0x66, 0x00, 0x00
bac: 0x00000002 -> 0x00, 0x00, 0x00, 0x02
adding components: 0x00, 0x66, 0x00, 0x0x
dividing comp    : 0x00, 0x33, 0x00, 0x01
exp:                 OK    OK    OK    OK

Сделайте то же самое с 0x0300, 0x0600, и вы увидите, что деление «зеленый» повлияет на «синий», если не будет правильно округлено. Математика по компонентам решила это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...