关于0xff的问题

lak*_*ksh 0 c++

我正在研究C++代码.不太确定下面的代码试图做什么.希望有人帮忙.

int pval = t_gamma[depth[i]];
        int lb = pval & 0xff;
        switch (pval>>8) {
            case 0:
                depth_mid[3*i+0] = 255;
                depth_mid[3*i+1] = 255-lb;
                depth_mid[3*i+2] = 255-lb;
                break;
            case 1:
                depth_mid[3*i+0] = 255;
                depth_mid[3*i+1] = lb;
                depth_mid[3*i+2] = 0;
                break;
            case 2:
                depth_mid[3*i+0] = 255-lb;
                depth_mid[3*i+1] = 255;
                depth_mid[3*i+2] = 0;
                break;
            case 3:
                depth_mid[3*i+0] = 0;
                depth_mid[3*i+1] = 255;
                depth_mid[3*i+2] = lb;
                break;
            case 4:
                depth_mid[3*i+0] = 0;
                depth_mid[3*i+1] = 255-lb;
                depth_mid[3*i+2] = 255;
                break;
            case 5:
                depth_mid[3*i+0] = 0;
                depth_mid[3*i+1] = 0;
                depth_mid[3*i+2] = 255-lb;
                break;
            default:
                depth_mid[3*i+0] = 0;
                depth_mid[3*i+1] = 0;
                depth_mid[3*i+2] = 0;
                break;
        }
Run Code Online (Sandbox Code Playgroud)

Aas*_*set 10

0xff表示"十六进制数ff" - 换句话说,是整数255,它具有二进制表示00000000000000000000000011111111(当使用32位整数时).该&运算符执行按位与运算.a & b会给你一个带有位模式的整数,0其中所有位置b都有a 0,而在所有位置b都有a 1,使用相应的位值from a(这也是相反的方向).例如,位与101101110000110100000101.

在这种情况下,pval & 0xff将为您提供最右边的8位pval.

至于代码的作用,我相信它会尝试将颜色值从特殊格式转换为标准RGB:颜色值似乎包含11位,其中三个指示颜色范围(例如,000似乎表示范围"白色到蓝色",而" 001表示"红色到黄色"),最右边的8位表示该范围内的颜色.