什么是“&”和“|”用于此颜色生成代码?

时间:2013-02-09 20:47:04

标签: java colors 2d-games

只是偶然发现了YouTube上的2D游戏开发视频系列,并决定学习和理解视频中的代码将成为我下一次Java学习的冒险。

最大的障碍是试图自己破解代码,因为视频制作者有一种令人难以置信的新手不友好的方法来解释所有内容。

所以这是我的问题和视频

视频:http://www.youtube.com/watch?v=7eotyB7oNHE

在5:31,他输入了代码

int index = 0;
    for (int r = 0; r < 6; r++){
        for (int g = 0; g < 6; g++){
            for (int b = 0; b < 6; b++){

                int rr = (r * 255/5);
                int gg = (g * 255/5);
                int bb = (b * 255/5);

                colors[index++] = rr << 16 | gg << 8 | bb;
            }
        }
    }
colors[index++] = rr << 16 | gg << 8 | bb;

根据我的理解,他正在使用由每种颜色的6种阴影创建的所有组合来填充数组,但我没有得到的是|符号所代表的含义。他在视频中提到他在之前的视频中谈到过它,但他没有,我检查过,我确信他在&上用|错误地解释了他的解释,因为他确实触及了&操作有点方法,但从未在之前的任何视频中提及过|。我没有得到的另一件事是我们为什么要改变颜色。他在视频中对此进行了解释,但对我来说仍然没有意义。基本上他说的是我们改变了它,因为bbggrr都有2&amp; 8位数据,但这不足以作为对我的解释。我需要知道为什么我们这样做,为什么我们需要转移到左边只是因为bbggrr颜色中有2 ^ 8位数据,什么,首先有2 ^ 8位数据意味着什么?

1 个答案:

答案 0 :(得分:9)

java中的|是按位或运算符:Bitwise operations 没有观看整个视频,我想他正在尝试做的是放 将所有颜色值(RGB)转换为一个32Bit整数。由于rr,gg,bb只能有值 从0-255,只需要8位,他可以通过使用shift和或操作将它们放入一个变量中。例如:

rr:       00000000 00000000 00000000 10101010
rr<<16:   00000000 10101010 00000000 00000000

gg:       00000000 00000000 00000000 11110000
gg<<8:    00000000 00000000 11110000 00000000

bb:       00000000 00000000 00000000 00001111

value = rr << 16 | gg << 8 | bb 

rr<<16:   00000000 10101010 00000000 00000000
gg<<8:    00000000 00000000 11110000 00000000
bb:       00000000 00000000 00000000 00001111

value:    00000000 10101010 11110000 00001111
                      ^        ^        ^
                      rr       gg       bb

现在我们将所有三个颜色值都放在一个整数变量中。