十六进制操纵困难。无法达到预期值

时间:2011-10-08 06:28:57

标签: java hex mean

我应该合并源数组和背景数组的值以获得预期值(答案数组)。

    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,基数10为1024,基数为2为100 0000 0000.我看不出如何达到该解决方案。

1 个答案:

答案 0 :(得分:2)

术语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执行相同操作,您将看到,如果未正确舍入,“绿色”的划分将影响“蓝色”。通过组件进行数学运算解决了这一问题。