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

Gay*_*ord 3 java colors 2d-games

刚刚在YouTube上偶然发现了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;
Run Code Online (Sandbox Code Playgroud)

根据我的理解,他正在为阵列填充每种颜色由6种色调创建的所有组合,但我没有得到的是|符号所代表的含义.他提到在他以前的影片谈论它的视频,但他没有,我查,我相信他误以为他的解释&|,因为他确实接触于&操作了一段路,但从来没有提到|在他之前的任何视频.我没有得到的另一件事是我们为什么要改变颜色.他在视频中对此进行了解释,但对我来说仍然没有意义.基本上所有他说的是我们改变它,因为bb,gg并且rr所有数据都有2和8位,但这不足以作为对我的解释.我需要知道为什么我们要这么做,为什么我们需要左移只是因为bb,gg,rr颜色有数据的2 ^ 8位吧,摆在首位是什么有数据的2 ^ 8位的意思?

Hec*_*tor 9

|java中是按位或操作:按位操作 而不观看整个视频,我猜他正在努力做的就是把所有颜色值(RGB)转换成一个32位整数.由于rr,gg,bb只能有0-255的值,只需要8位,因此可以使用shift和or操作将它们放入一个变量中.例如:

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
Run Code Online (Sandbox Code Playgroud)

所以现在我们在一个整数变量中有所有三个颜色值.